<center><h2>Content Disclaimer</h2></center>
This is a dark, post-apocalyptic survival game featuring morally complex choices, adult themes, and strong consequences.
The game does not glorify violence or immoral behavior - instead, it presents players with difficult decisions and lets them face the consequences.
All NSFW scenes involve consensual interactions between fictional characters and are portrayed within the narrative context.
The world is brutal, but your choices define who you become - for better or worse.
<<button "Agree">><<goto "MainMenu">><</button>><<script>>
const ts = Date.now();
importScripts("js/nsfwMediaIndex.js?v=" + ts)
.then(() => {
console.log("[NSFW] mediaIndex loaded:", setup.mediaIndex);
window.setup = setup;
})
.catch(err => alert("Error nsfwMediaIndex.js: " + err));
<</script>>
<<script>>
setup.sceneIDToFolder = sceneID => {
if (!sceneID) return null;
const key = String(sceneID).toLowerCase();
if (key === "MMF" || key === "mmf") return "mmf";
if (key === "FFM" || key === "ffm") return "ffm";
const parts = key.split("_");
if (parts.length === 2) {
const [gender, race] = parts;
return gender === "female" ? (race + "fem") : (race + "man");
}
return key;
};
setup.getRandomNSFWMedia = (sceneID, action) => {
const folder = setup.sceneIDToFolder(sceneID);
const list = setup.mediaIndex?.[folder]?.[action];
if (!list || list.length === 0) return null;
return `assets/characters/${folder}/${action}/${list.random()}`;
};
window.setup = setup;
<</script>>
<<script>>
setup.getRandomCompanionMedia = function (companionId, action) {
const list = setup.mediaIndex?.[companionId]?.[action];
if (!list || list.length === 0) return null;
return `assets/characters/${companionId}/${action}/${setup.random(list)}`;
};
setup.resolveCompanionNSFWMedia = function () {
const v = State.variables;
if (!v || !v.currentCompanion || !v.lastAction) return;
const media = setup.getRandomCompanionMedia(v.currentCompanion, v.lastAction);
if (media) v.currentMedia = media;
};
window.setup = setup;
<</script>>
<<set $sessionTimestamp = Date.now()>>
<<set setup.textFemale = JSON.parse(Story.get("TextFemale").text)>>
<<run setup.textFemale = JSON.parse(Story.get("TextFemale").text.trim()); window.setup = setup >>
<<set setup.textMale = JSON.parse(Story.get("TextMale").text)>>
<<run setup.textMale = JSON.parse(Story.get("TextMale").text.trim()); window.setup = setup >>
<<set setup.textFFM = JSON.parse(Story.get("TextFFM").text)>>
<<run setup.textFFM = JSON.parse(Story.get("TextFFM").text.trim()); window.setup = setup >>
<<set setup.textMMF = JSON.parse(Story.get("TextMMF").text)>>
<<run setup.textMMF = JSON.parse(Story.get("TextMMF").text.trim()); window.setup = setup >>
<<set setup.nsfwOptions = JSON.parse(Story.get("RandomNSFWoptions").text)>>
<<run
setup.sceneIDToFolder = function (sceneID) {
if (!sceneID) return null;
const key = String(sceneID).toLowerCase();
if (key === "MMF" || key === "mmf") return "mmf";
if (key === "FFM" || key === "ffm") return "ffm";
const parts = key.split("_");
if (parts.length === 2) {
const [gender, race] = parts;
return gender === "female" ? (race + "fem") : (race + "man");
}
return key;
};
setup.getRandomNSFWMedia = function (sceneID, action) {
const folder = setup.sceneIDToFolder(sceneID);
const list = setup.mediaIndex?.[folder]?.[action];
if (!list || list.length === 0) return null;
return `assets/characters/${folder}/${action}/${setup.random(list)}`;
};
window.setup = setup;
>>
<<set $lastRecruitOfferDay = null>>
<<set $recruitCandidateId = null>>
<<set $recruitAllowSwap = true>>
<<set $version = 0.03>>
<<set $day = 1>>
<<set $gameTime = new Date(1970,0,1,6,0)>>
<<set $eventToday = false>>
<<set $seenEvents = []>>
<<set $showBar = false>>
<<set $unlockedLocations = []>>
<<set $shower = false>>
<<set $nap = false>>
<<set $camera = false>>
<<set $catAngel = false>>
<<set $reputation = 0>>
<<set $currency = 0>>
<<set $traderRep = 0>>
<<set $trader = true>>
<<set $player = {
name: "",
energy: 100,
maxEnergy: 100,
health: 100,
maxHealth: 100,
hunger: 0,
maxHunger: 100,
thirst: 0,
maxThirst: 100,
strength: 0,
endurance: 0,
intelligence: 0,
inventory: [],
companions: []
}>>
<<set $barHiddenPassages = ["Start","PreGame","SelectProfile","EnterName"]>>
<<set $randomEvents = []>>
<<set $npcs = clone(setup.npcDefs)>>
<<script>>
State.variables.npcs.forEach(npc => {
npc.hunger = npc.hunger ?? 0;
npc.maxHunger = npc.maxHunger ?? 100;
npc.thirst = npc.thirst ?? 0;
npc.maxThirst = npc.maxThirst ?? 100;
});
State.variables.player.hunger = State.variables.player.hunger ?? 0;
State.variables.player.maxHunger = State.variables.player.maxHunger ?? 100;
State.variables.player.thirst = State.variables.player.thirst ?? 0;
State.variables.player.maxThirst = State.variables.player.maxThirst ?? 100;
State.variables.companionRel = State.variables.companionRel || {};
State.variables.npcs.forEach(npc => {
if (State.variables.companionRel[npc.id] == null) {
State.variables.companionRel[npc.id] = 0; // start od 0
}
});
<</script>>
<<script>>State.variables.unlockedLocations = setup.nightLocations
.filter(loc => loc.starter)
.map(loc => loc.id);
State.variables.items = setup.itemDefs;<</script>>
<<set $selectedCompanions = [null, null]>>
<<set $unlockedCompanions = []>>
<<set $gymUpgrade = false>>
<<set $bedUpgrade = false>>
<<set $showerUpgrade = false>>
<<set $radio = false>>
<<set $dailyradio = true>>
<<set $patronUnlocked = false>>
<<set $cheats = false>><<if $player.energy < 1>><<set $player.energy = 0>><</if>>
<<include "widget - death">><<include "widget - UpdateStatuses">><<include "check version">><<nobr>>
<<set $player.energy = $player.maxEnergy>>
<<set $player.sleepQuality = "normal">>
<<if $player.beatenDaysLeft <= 0>>
<<set $player.beaten = false>>
<</if>>
<<if $player.bleeding or $player.beaten>>
<<set $player.energy -= 30>>
<<set $player.sleepQuality = "restless">>
<<elseif $player.arousal >= 80>>
<<set $player.energy -= 20>>
<<set $player.sleepQuality = "horny">>
<</if>>
<<set $player.energy = Math.clamp($player.energy, 0, $player.maxEnergy)>>
<<if not $player.bleeding and not $player.beaten>>
<<set $player.health += 30>>
<</if>>
<<set $player.health = Math.clamp($player.health, 0, $player.maxHealth)>>
<<for _char range $player.companions>>
<<set _h = setup.getHunger(_char)>>
<<set _t = setup.getThirst(_char)>>
<<run setup.setHunger(_char, Math.min(setup.getMaxHun(_char), _h + 5))>>
<<run setup.setThirst(_char, Math.min(setup.getMaxThr(_char), _t + 7))>>
<</for>>
<<set $player.hunger += 5>>
<<set $player.thirst += 7>>
<<set $eventToday = false>>
<<adddays 1>>
<<if $player.beaten>>
<<set $player.beatenDaysLeft -= 1>>
<<if $player.beatenDaysLeft <= 0>>
<<set $player.beaten = false>>
<</if>>
<</if>>
<<if $day % 3 is 0>>
<<set Save.autosave.save()>>
<</if>>
<<if $trader>>
<<set $traderToday = (random(99) < 35)>>
<</if>>
<<set $dailyradio = true>>
<</nobr>><<nobr>><<set _toKick = []>>
<<for _c range $player.companions>>
<<set _id = (typeof _c === 'string') ? _c : _c.id>>
<<if _id>>
<<set _h = State.variables[_id + 'Hunger'] ?? 0>>
<<set _t = State.variables[_id + 'Thirst'] ?? 0>>
<<if _h >= 100 or _t >= 100>>
<<set _toKick.push(_id)>>
<</if>>
<</if>>
<</for>>
<<if _toKick.length>>
<<run _toKick.forEach(id => {
setup.kickCompanion(id);
const V = State.variables;
delete V[`${id}Hunger`];
delete V[`${id}Thirst`];
const name = (V.npcs || []).find(n => n.id===id)?.name || id;
V.lastDeathMessage = `${name} left the bunker due to starvation/dehydration.`;
})>>
<</if>>
<<if $player.bleeding is true>><<set $player.health -= 1>><</if>><</nobr>><<run setup.playMusic('main', 'assets/audio/musicMain.mp3', true)>>\
<div id="bunker-grid" class="option-grid">\
<<if $traderToday is true>><<navbutton "trader" "Trader">><</if>><<navbutton "bedroom" "Bedroom">><<navbutton "kitchen" "Kitchen">><<navbutton "training room" "Training room">><<navbutton "crafting" "Crafting">></div>\<div id="npc-modal" class="npc-modal"></div><center><h2>The Last Minutes</h2></center>
<p>Your hands tremble as the alarm echoes. You drop into the chair, almost frozen. On the screen, the world outside collapses into fire and dust…</p>
<center><video width="480" height="320" controls autoplay playsinline loop>
<source src="assets/ui/introvid.mp4" type="video/mp4">
</video>
</center>
<p>The broadcast cuts to static. You draw a deep breath, grab the handle, and pull. The heavy bunker hatch slams shut. Darkness swallows you…</p>
<<button "Enter the Bunker">><<goto "Bunker">><</button>><center><h2>What do you take with you?</h2></center>
<p>The old radio crackles with a desperate broadcast: “Seek shelter immediately! Take only what you can carry!"</p>
<div id="pre-game-grid" class="option-grid"></div>
<button id="pre-game-continue">Continue</button><center><h2>Hey, $player.name! Choose your profile.</h2></center>
<p>You rush to the window. Outside, chaos reigns. People scream, cars crash, smoke already rises in the distance.</p>
<div class="profile-choose" id="profile-grid">\
<div class="profile-tile" data-profile="bodybuilder">\
<img src="assets/ui/profile_bodybuilder.jpg" alt="Bodybuilder">\
<div class="label">Bodybuilder</div>\
</div>\
<div class="profile-tile" data-profile="runner">\
<img src="assets/ui/profile_runner.jpg" alt="Runner">\
<div class="label">Runner</div>\
</div>\
<div class="profile-tile" data-profile="student">\
<img src="assets/ui/profile_student.jpg" alt="Student">\
<div class="label">Student</div>\
</div>\
</div>\
<button id="profile-continue" style="display:none" disabled>Continue</button><center><h2>The sirens are howling...</h2></center>
<p>Before you run... Tell me, survivor, what is your name?</p>
<input id="nameInput"
type="text"
placeholder="Your name..."
maxlength="20"
value="John">
<br><br>
<button id="name-continue"> Continue</button><<set _ev = $currentEvent>>\
\
<div class="event-container">\
\
<<if _ev.title>>\
<h2 class="event-title"><<=_ev.title>></h2>\
<</if>>\
<<if $camera and _ev.imageWithCamera>>\
<<print '<center><img src="' + _ev.imageWithCamera + '" class="event-image" style="max-height:500px;"></center>'>>\
<<elseif _ev.image>>\
<<print '<center><img src="' + _ev.image + '" class="event-image" style="max-height:500px;"></center>'>>\
<</if>>\
\
<p class="event-text">\
<<if $camera and _ev.textWithCamera>>\
<<=_ev.textWithCamera>>\
<<else>>\
<<=_ev.text>>\
<</if>>\
</p>\
<div class="event-choices"><<for _i = 0; _i < _ev.choices.length; _i++>>
<<set _c = _ev.choices[_i]>><<capture _c>><div class="event-choice"><<button _c.text>><<if _c.applyEffects>><<run setup.applyEventEffects()>><<else>><<run State.variables._eventEffectBuffer = []>><</if>><<goto _c.passage>>
<</button>></div><</capture>><</for>></div></div><h2>Want to send someone on a scavenge mission?</h2>
<<button "Yes">><<goto "SelectCompanionForNight">><</button>>
<<button "No – Just sleep through the night">><<goto "NewDay">><</button>><div class="map-container"><img src="assets/ui/nightmap.jpg" alt="Nightmap">
<div id="pins"></div></div><center><h2>Night Mission Summary</h2></center>
\
<<run setup.applyNightLootOnce()>>\
\
<<set _actor = $nightActor || 'player'>>\
<<set _isPlayer = (_actor === 'player')>>\
<<set _compName = _isPlayer ? 'You' : ($npcs.find(n => n.id === _actor)?.name || _actor)>>\
\
<<if $lastDeathMessage>>\
<div class="alert danger" style="margin:8px 0; padding:10px; border:1px solid #a33; background:#2a0000; color:#f2caca; border-radius:6px;">\
<<=$lastDeathMessage>>
</div>\
<<set $lastDeathMessage = null>>\
<<else>>\
<<= setup.buildLootGrid($lastNightLoot, {
emptyHtml: _isPlayer
? '<p style="text-align:center;opacity:.8;">You found nothing.</p>'
: '<p style="text-align:center;opacity:.8;">' + _compName + ' found nothing.</p>'
}) >>\
<</if>>\
<div style="text-align:center; margin-top:1em;">\
<<button "Continue">><<goto "Bunker">><</button>>
</div><center><h2>Night expedition</h2></center>
<p>Who will go on night reconnaissance?</p>
<div id="night-actor-grid" class="npc-pick-grid"></div>
<button id="night-actor-continue" style="display:none; margin-top:20px; padding:10px 20px; font-size:16px;">Continue</button><h2>Choose gear for the mission</h2>
<div id="night-loadout-grid" class="loadout-grid"></div>
<<button "Continue">><<run setup.rememberLastNightLoadout()>><<goto "SelectNightLocation">><</button>><<set $items = [
/* ————— SURVIVAL ————— */
{
id: "water",
name: "Water Bottle",
type: "consumable",
icon: "assets/ui/water.jpg",
description: "Clean water – restores 30 thirst.",
thirstRestore: 30,
value: 20,
tradeChance: 0.6,
tags: ["survival"]
},
{
id: "cannedFood",
name: "Canned Food",
type: "consumable",
icon: "assets/ui/cannedFood.jpg",
description: "Canned meal – restores 40 hunger.",
hungerRestore: 40,
value: 10,
tradeChance: 0.6,
tags: ["survival"]
},
/* ————— MEDICAL ————— */
{
id: "firstAid",
name: "First Aid Kit",
type: "medical",
icon: "assets/ui/firstAid.jpg",
description: "Heals 50 HP",
healAmount: 50,
value: 50,
tradeChance: 0.4,
tags: ["medical"]
},
{
id: "bandage",
name: "Bandages",
type: "medical",
icon: "assets/ui/bandage.jpg",
description: "Stops bleeding (removes bleed rate).",
removeBleed: true,
value: 10,
tradeChance: 0.6,
tags: ["medical"]
},
/* ————— GEAR (for night expeditions) ————— */
{
id: "flashlight",
name: "Flashlight",
type: "tool",
icon: "assets/ui/flashlight.jpg",
description: "Allows vision at night. +10% loot chance.",
durability: 100,
lootBonus: 0.10,
tradeChance: 0.2,
value: 100,
tags: ["gear","night"]
},
{
id: "knife",
name: "Knife",
type: "weapon",
icon: "assets/ui/knife.jpg",
description: "Basic weapon. Damage: 5.",
durability: 100,
damage: 5,
value: 150,
tradeChance: 0.2,
tags: ["gear","night"]
},
{
id: "map",
name: "Map",
type: "utility",
icon: "assets/ui/map.jpg",
description: "Unlocks 2 new locations after use.",
unlocks: 2,
value: 100,
tradeChance: 0.2,
tags: ["gear","night"]
},
{
id: "bag",
name: "Backpack",
type: "container",
icon: "assets/ui/bag.jpg",
description: "Backpack - adds +2 loot slots.",
capacityBonus: 2,
value: 80,
tradeChance: 0.4,
tags: ["gear","night"]
},
{
id: "suitcase",
name: "Suitcase",
type: "container",
icon: "assets/ui/suitcase.jpg",
description: "Suitcase - adds +4 loot slots.",
capacityBonus: 4,
value: 140,
tradeChance: 0.3,
tags: ["gear","night"]
},
/* ————— CRAFTING ————— */
{
id: "scrapMetal",
name: "Scrap Metal",
type: "crafting",
icon: "assets/ui/scrapMetal.jpg",
description: "Component for crafting.",
value: 5,
tradeChance: 0.9,
tags: ["craft"]
},
{
id: "wood",
name: "Wood",
type: "crafting",
icon: "assets/ui/wood.jpg",
description: "Used for construction and crafting.",
value: 5,
tradeChance: 0.9,
tags: ["craft"]
},
{
id: "electronics",
name: "Electronics",
type: "crafting",
icon: "assets/ui/electronics.jpg",
description: "Used for crafting.",
value: 20,
tradeChance: 0.5,
tags: ["craft"]
},
/* ————— STAT BOOSTERS ————— */
{
id: "steroids",
name: "Steroids",
type: "booster",
icon: "assets/ui/steroids.jpg",
description: "Increases strength by 1.",
stat: "strength",
bonus: 1,
value: 300,
tradeChance: 0.2,
tags: ["booster"]
},
{
id: "book",
name: "Book",
type: "booster",
icon: "assets/ui/book.jpg",
description: "Increases intelligence by 1.",
stat: "intelligence",
bonus: 1,
value: 200,
tradeChance: 0.3,
tags: ["booster"]
},
/* ————— EXTRA WEAPONS ————— */
{
id: "bat",
name: "Baseball Bat",
type: "weapon",
icon: "assets/ui/bat.jpg",
description: "Sturdy melee weapon. Damage: 8.",
durability: 120,
damage: 8,
value: 180,
tradeChance: 0.2,
tags: ["gear","night"]
},
{
id: "pistol",
name: "Pistol",
type: "weapon",
icon: "assets/ui/pistol.jpg",
description: "Firearm. High damage: 15.",
durability: 80,
damage: 15,
value: 500,
tradeChance: 0.1,
tags: ["gear","night"]
},
/* ————— TRADEABLES & RARE ————— */
{
id: "goldRing",
name: "Gold Ring",
type: "trade",
icon: "assets/ui/goldRing.jpg",
description: "Valuable item for trading.",
value: 100,
tags: ["trade"]
},
{
id: "goldWatch",
name: "Gold Watch",
type: "trade",
icon: "assets/ui/goldWatch.jpg",
description: "Rare and expensive – great for barter.",
value: 200,
tags: ["trade"]
},
{
id: "gasMask",
name: "Gas Mask",
type: "gear",
icon: "assets/ui/gasMask.jpg",
description: "Allows entry to contaminated zones.",
unlockZones: true,
value: 500,
tradeChance: 0.1,
tags: ["gear","night"]
}
]>>
<<set _fight = $currentFight>>\
<<if !_fight>>\
<<goto "Bunker">><<stop>>\
<</if>>\
\
<<set _actor = _fight.party[_fight.turnIndex]>>\
\
<<if !_actor.isPlayer>>\
<<run setup.enemyAttack()>>\
<<goto setup.resolveTurn()>>\
<</if>>\
\
<<set _player = _fight.party.find(c => c.isPlayer)>>\
<<set _pPct = Math.round(_player.hp / _player.maxHp * 100)>>\
\
<center><h1>Combat</h1></center>
\
<div class="enemies-section" style="display:flex;gap:20px;justify-content:center;">\
<<set _canAct = _actor.isPlayer>>\
<<for _i = 0; _i < _fight.party.length; _i++>>\
<<set _enemy = _fight.party[_i]>>\
<<if !_enemy.isPlayer>>\
\
<<capture _enemy>>\
<<set _ePct = Math.round(_enemy.hp / _enemy.maxHp * 100)>>\
<<set _imgPath = 'assets/characters/enemies/' + _enemy.spritePrefix + '_' + _enemy.weapon + '.jpg'>>\
<<set _imgHTML = '<img src="' + _imgPath + '" class="enemy-sprite">'>>\
\
<div class="enemy-card" style="text-align:center;">\
<<if _canAct and _enemy.hp > 0>>\
<<linkreplace _imgHTML>>\
<<run setup.playerAttackTarget(_enemy.id)>>\
<<goto setup.resolveTurn()>>\
<</linkreplace>>\
<<else>><<print _imgHTML>><</if>>\
<div><strong><<= _enemy.name>></strong>
(<<= _enemy.weaponName || "?" >>)</div>
\
<<print '<div class="hp-bar enemy">' + '<div class="hp-bar__fill" style="width:' + _ePct + '%;"></div>' + '<div class="hp-bar__text">' + _enemy.hp + ' / ' + _enemy.maxHp + '</div>' + '</div>'>>
<</capture>>\
\
<</if>>\
<</for>>\
</div>\
\
<<if _fight.lastMessage>><div class="combat-log"><p><<= _fight.lastMessage>></p></div><</if>>
\
<div class="fight-ui"><div class="player-section" style="text-align:center;">\
<center><img src="assets/characters/player/avatar.jpg" style="width: 160px"></center>
<div><strong>You</strong></div>
<<print
'<div class="hp-bar">' +
'<div class="hp-bar__fill" style="width:' + _pPct + '%;"></div>' +
'<div class="hp-bar__text">' + _player.hp + ' / ' + _player.maxHp + '</div>' +
'</div>'>>
</div>
</div><<run setup.startCombat({
enemies: [
{ id: "raider1", name: "Bandyta", maxHp: 30, damage: 4 },
{ id: "raider2", name: "Drugi Bandyta", maxHp: 30, damage: 4 }
],
allies: [],
onWin: "AfterCombat",
onLose: "GameOver"
})>><<if $catAngel is true>><center><img src="assets/ui/death.jpg"></center>
You were lying on the ground, covered in blood and expecting to die. Suddenly, you heard a meow. Then you lost consciousness. Some time later, you woke up in your bunker, but there was no sign of the cat. This time, your guardian angel was watching over you.
<<button "Continue">><<set $catAngel = false>><<set $player.energy = 10>><<set $player.health = 10>><<if $player.hunger >= $player.maxHunger>><<set $player.hunger = 80>><</if>><<if $player.thirst >= $player.maxThirst>><<set $player.thirst = 80>><</if>><<goto "Bunker">><</button>><<elseif $catAngel is false>>\
<center><h1>Game Over</h1></center>
<center><img src="assets/ui/death.jpg"></center>
\
<<set _deadFromHunger = ($player.hunger >= $player.maxHunger)>>\
<<set _deadFromThirst = ($player.thirst >= $player.maxThirst)>>\
<<set _deadFromWounds = ($player.health <= 0)>>\
<<if _deadFromHunger and _deadFromThirst>>\
You black out from starvation and dehydration… You died.
<<elseif _deadFromHunger>>\
You black out from starvation… You died.
<<elseif _deadFromThirst>>\
You black out from dehydration… You died.
<<elseif _deadFromWounds>>\
You black out from losing too much blood… You died.
<<else>>\
You didn't make it... You died.
<</if>>\
<<button "Continue">>
<<run (function(){
try {
if (Save?.autosave?.exists?.() && Save.autosave.load) { Save.autosave.load(); return; }
} catch(e) {}
Engine.restart();
})()>>
<</button>>
<</if>><h2>Something rustles around the corner...</h2>
<p>You see a shadow in the darkness. Prepare for battle.</p>
\
<<set _tier = $currentNightTier>> \
<<set _enemies = setup.generateTieredEnemies(_tier)>>\
\
<<button "Fight">><<run setup.startCombat({
enemies: _enemies,
allies: [],
onWin: "NightMissionSummary",
onLose: "GameOver"
})>>
<<goto "Combat">><</button>><<script>>
$(document).on(':passagedisplay', ev => {
const V = State.variables;
if (ev.passage.title === 'GameOver' || V.__deathGate) return;
const dead =
(V.player.health <= 0) ||
(V.player.hunger >= V.player.maxHunger) ||
(V.player.thirst >= V.player.maxThirst);
if (dead) {
V.__deathGate = true; // bramka przed pętlą
setup.currentFight = null;
SugarCube.Engine.play('GameOver');
}
});
<</script>><<if $showHUD is not false>> \
<<include "HUD">> \
<</if>>\<center><h1>Bedroom</h1></center>
<div id="bunker-grid" class="option-grid"><<if $radio and $dailyradio == true>><<navbutton "radio" "Use radio">><</if>><<navbutton "companions" "Companions">><<navbutton "nap" "Nap">><<navbutton "shower" "Shower">><<navbutton "NightPhase1" "End day">></div>
<<button "Back">><<goto "Bunker">><</button>><center><h1>Kitchen</h1></center>
<div id="kitchen-feed-grid"></div>
<<button "Back">><<goto "Bunker">><</button>><center><h1>Training room</h1></center>
<div id="training-grid" class="training-grid">
<<set _hasComp = ($player.companions && $player.companions.length > 0)>>\
<<set _needS = 15>><<set _canS = $player.energy >= _needS>>\
<div class="training-tile">\
<<if _canS>>\
<<if _hasComp>>\
<a data-passage="TrainingSelectPartner" data-setter="$trainingStat='strength';">\
<<print '<img src="assets/ui/strength.jpg" alt="Strength">'>>\
<div class="label">Train Strength</div>\
</a>\
<<else>>\
<a data-passage="Training" data-setter="$trainingStat='strength'; $trainingPartner=null;">\
<<print '<img src="assets/ui/strength.jpg" alt="Strength">'>>\
<div class="label">Train Strength</div>\
</a>\
<</if>>\
<<else>>\
<div class="tile-block">\
<<print '<img src="assets/ui/strength.jpg" alt="Strength">'>>\
<div class="label">Not enough energy</div>\
</div>\
<</if>>\
</div>\
\
<<set _needE = 20>><<set _canE = $player.energy >= _needE>>\
<div class="training-tile">\
<<if _canE>>\
<<if _hasComp>>\
<a data-passage="TrainingSelectPartner" data-setter="$trainingStat='endurance';">\
<<print '<img src="assets/ui/endurance.jpg" alt="Endurance">'>>\
<div class="label">Train Endurance</div>\
</a>\
<<else>>\
<a data-passage="Training" data-setter="$trainingStat='endurance'; $trainingPartner=null;">\
<<print '<img src="assets/ui/endurance.jpg" alt="Endurance">'>>\
<div class="label">Train Endurance</div>\
</a>\
<</if>>\
<<else>>\
<div class="tile-block">\
<<print '<img src="assets/ui/endurance.jpg" alt="Endurance">'>>\
<div class="label">Not enough energy</div>\
</div>\
<</if>>\
</div>\
\
<<set _needI = 5>><<set _canI = $player.energy >= _needI>>\
<div class="training-tile">\
<<if _canI>>\
<<if _hasComp>>\
<a data-passage="TrainingSelectPartner" data-setter="$trainingStat='intelligence';">\
<<print '<img src="assets/ui/intelligence.jpg" alt="Intelligence">'>>\
<div class="label">Study</div>\
</a>\
<<else>>\
<a data-passage="Training" data-setter="$trainingStat='intelligence'; $trainingPartner=null;">\
<<print '<img src="assets/ui/intelligence.jpg" alt="Intelligence">'>>\
<div class="label">Study</div>\
</a>\
<</if>>\
<<else>>\
<div class="tile-block">\
<<print '<img src="assets/ui/intelligence.jpg" alt="Intelligence">'>>\
<div class="label">Not enough energy</div>\
</div>\
<</if>>\
</div>\
<<button "Back">><<goto "Bunker">><</button>><center><img src="assets/locations/nap.webp"></center><<if $nap is false>><<if $bedUpgrade is false>><<set $player.energy += 20>><<elseif $bedUpgrade is true>><<set $player.energy += 30>><</if>><<set $nap to true>><<addmins 90>>
<<if $bedUpgrade is false>>You took a nap and regained some energy.<<elseif $bedUpgrade is true>>You took a nap on your comfortable bed and regained a lot of energy.<</if>><<elseif $nap is true>><<addmins 5>><<set $player.energy += 1>>You lay down for a moment, but you couldn't fall asleep again that day.<</if>>
<<button "Next">><<goto "bedroom">><</button>><center><img src="assets/locations/shower.webp"></center>
<<if $shower is true>><<addmins 5>><<set $player.energy += 1>><<set _alreadyShower = [
"You splash some water on your face, but you've already showered today.",
"You stand under the water briefly, but it doesn’t feel as good the second time.",
"You rinse off quickly, already feeling clean enough."
]>><<print _alreadyShower.random()>><<elseif $shower is false>><<if $showerUpgrade is false>><<set $player.energy += 10>><<elseif $showerUpgrade is true>><<set $player.energy += 20>><</if>><<addmins 20>><<set $shower to true>><<if $showerUpgrade is false>>
You take a quick, cold shower. It's not exactly relaxing, but it helps you feel a bit more awake.<<elseif $showerUpgrade is true>>You enjoy a refreshing hot shower, thanks to your upgraded bathroom. You feel recharged and relaxed.<</if>><</if>>
<<button "Next">><<goto "bedroom">><</button>><<run setup.updateMaxHealth()>>\
<<run setup.updateMaxEnergy()>>\
<<set _stat = ($trainingStat || '').toLowerCase()>>\
<<set _pool = setup.trainingGifs[_stat] ? setup.trainingGifs[_stat] : setup.trainingGifs.default>>\
<<set _gif = _pool.random()>>\
<<print '<center><img src="' + _gif + '" class="training-gif" alt="training ' + _stat + '"></center>'>>\
\
<<if $trainingPartner is null>>\
<<set _base = setup.getTrainingBaseDelta(_stat)>>\
<<if setup.train($trainingStat)>>\
You practice your <<= $trainingStat >> alone and gain +<<=_base>>.
Your new <<= $trainingStat >> is <<= State.variables.player[_stat] >>.
<<else>>\
You're too tired to train.
<</if>>\
<<else>>\
<<set _npc = $npcs.find(n => n.id === $trainingPartner)>>\
<<set _bonus = setup.getTrainingBonus($trainingPartner, _stat)>>\
<<set _base = setup.getTrainingBaseDelta(_stat)>>\
<<if setup.trainWithNPC($trainingStat, $trainingPartner)>>\
You train your <<= $trainingStat >> with <<= _npc ? _npc.name : $trainingPartner >> and gain +<<=_base>><<= _bonus ? ' (+' + _bonus + ' bonus)' : '' >>.
Your new <<= $trainingStat >> is <<= State.variables.player[_stat] >>.
<<set _statsNow = W.getCompanionStats($trainingPartner)>>
Their new <<= $trainingStat >> is <<= _statsNow[_stat] >>.
Your relationship raised.
<<else>>\
You're too tired to train with <<= _npc ? _npc.name : $trainingPartner >>.
<</if>>\
<</if>>\
<<button "Next">><<goto "training room">><</button>><div style="text-align: center;"><img src="assets/ui/smalllogo.png" style="max-width: 180px; margin-bottom: 6px;" alt="Game Logo">
<div style="color: #777; font-size: 12px;">Version 0.03</div></div>
<hr>
<div class="section-title">Day</div><<= $day>> | <<time24hr>>
<div class="section-title">Stats</div>
<div class="stat-box">⚡ Energy: <span class="ui-value" id="energyDisplay"><<= $player.energy >></span>
❤️ Health: <span class="ui-value" id="healthDisplay"><<= $player.health >></span>
💧 Hydration: <span class="ui-value" id="hydrationDisplay"><<= 100 - Math.max(0, Math.min(100, $player.thirst)) >></span>
🍖 Fullness: <span class="ui-value" id="fullnessDisplay"><<= 100 - Math.max(0, Math.min(100, $player.hunger)) >></span>
</div>\
<div class="section-title">Skills</div>
<div class="stat-box">Str: <span class="ui-value"><<= $player.strength >></span> | End: <span class="ui-value"><<= $player.endurance >></span> | Int: <span class="ui-value"><<= $player.intelligence >></span></div>
<hr>
<div class="section-title">Reputation</div><div class="stat-box reputation"><<= setup.getReputationDisplay() >></div>
<<if $player.bleeding is true>><div class="stat-box ui-danger">You're bleeding...</div><</if>>\
<<if $player.beaten is true>><div class="stat-box ui-danger">You're beaten...</div><</if>>\
<a id="wait-60" class="special-button">Wait 1 hour⏳</a>
<a data-passage="Inventory" class="special-button">Inventory📦 </a>
<div class="special-button" id="btn-cheats">Cheats🔑 </div>
<hr>
<a href="https://www.patreon.com/TestovironTesto"><img src="assets/ui/3.png" style="max-width: 180px" alt="Patreon"></a>
<a href="https://subscribestar.adult/testoviron"><img src="assets/ui/sslogo.png" style="max-width: 190px" alt="SubscribeStar"></a>
Join our community and support the development of the game!
<div class="custom-buttons-wrapper"><a href="#" class="special-button saves">💾SAVES</a>
<a href="#" class="special-button settings">⚙️SETTINGS</a>
<a href="#" class="special-button restart">🔄RESTART</a></div><div class="relation-label">Relation: <<print $companionRel[$currentCompanion]>></div><<nobr>><<run setup.resolveCompanionNSFWMedia()>><<if !$currentCompanion and $lastCompanion>><<set $currentCompanion = $lastCompanion>><</if>>
<<if (!$nsfwSceneInitialized) or ($currentScene !== $currentCompanion)>>
<<run setup.startCompanionNSFW({ scenes: $currentCompanion, text: "female" })>>
<</if>>
<<set _npcLabel = 'Her arousal'>>
<<set _sex = $fuckPussyAction>>
<<set _anal = $fuckAssAction>>
<<set $fuckPussyAction = false>>
<<set $fuckAssAction = false>>
<<set $currentScene = $currentCompanion>>
<<run setup.loadNSFWMedia($currentScene)>>
<<run setup.loadNSFWText && setup.loadNSFWText('female')>>
<<run setup.resolveNSFWText && setup.resolveNSFWText()>>
<<set $nsfwMedia = State.variables.nsfwMedia>>
<<set $nsfwGender = 'female'>><</nobr>>\
<div id="nsfw-main">\
<<if !$companionSceneInitialized>>\
<<set $companionSceneInitialized = true>>\
<<set $nsfwSceneStarted = false>>\
<<set $nsfwSceneEnded = false>>\
<<set $playerFinished = false>>\
<<set $currentMedia = setup.getRandomCompanionMedia($currentCompanion, "intro")>>\
<<set _introArray = setup.textFemale?.introText || []>>\
<<set $lastActionText = _introArray.length ? _introArray.random() : "⚠️ Missing introText">>\
<</if>>\
\
<<if $ArousalNPC >= 100>>\
<<run (function(){
const v = State.variables;
// NPC u kompanów = female
if ((State.temporary._sex || State.temporary._anal) && setup.hasCompanionNSFW('finishhersex')) {
setup.pickCompanionNSFW('finishhersex');
} else if (setup.hasCompanionNSFW('finishher')) {
setup.pickCompanionNSFW('finishher');
}
v.ArousalNPC = 45; // cooldown
})()>>\
<</if>>\
\
<<set _mediaData = $nsfwMedia[$currentScene]>>\
<<if !$currentMedia and _mediaData and _mediaData.intro and _mediaData.intro.length > 0>>\
<<set $currentMedia = setup.getRandomCompanionMedia($currentScene, "intro")>>\
<</if>>\
<div class="nsfw-frame"><div class="arousal-col"><<print '<div class="arousal-meter npc female" style="--level:' + $ArousalNPC + '%;" data-level="' + $ArousalNPC + '"></div>'>><div class="arousal-label"><<= _npcLabel>></div></div>\
<div class="nsfw-media"><center><<if $currentMedia and (!$nsfwSceneEnded or $nsfwEndCard)>><<if $currentMedia.endsWith(".mp4")>><<print '<video src="' + $currentMedia + '" autoplay muted loop style="max-width:100%; max-height:400px; border-radius:8px;"></video>'>><<else>><<print '<img src="' + $currentMedia + '" style="max-width:100%; max-height:400px; border-radius:8px;" />'>><</if>><</if>></center></div>
<div class="arousal-col"><<print '<div class="arousal-meter player" style="--level:' + $ArousalPlayer + '%;" data-level="' + $ArousalPlayer + '"></div>'>><div class="arousal-label">Your arousal</div></div></div>
<<if $lastActionText>><p class="nsfw-text"><<=$lastActionText>></p><</if>>
<<if !$nsfwSceneEnded>>\
<<if $player.energy >= 2 and ($ArousalPlayer lt 100) and (!$playerFinished)>>\
<<CompanionNSFWButtons>>\
<</if>>\
<div style="text-align:center; margin-top:1em;">\
<<button "End scene">>
<<run setup.exitNSFWMusic()>>\
<<goto "companions">>\
<</button>>\
</div>\
<</if>>\
\
<<if ($ArousalPlayer gte 100) and (!$playerFinished)>><div class="finish-options" style="display:flex; flex-direction:column; align-items:center; gap:12px; margin-top:16px;">\
\
<<if _sex and setup.hasCompanionNSFW('cuminpussy')>>\
<<button "Finish Inside">>\
<<run setup.pickCompanionNSFW('cuminpussy')>>\
<<set $ArousalPlayer = 0>><<set $playerFinished = true>>\
<<goto "CompanionScene">>\
<</button>>\
<</if>>\
\
<<if _anal and setup.hasCompanionNSFW('cuminass')>>\
<<button "Finish in Ass">>\
<<run setup.pickCompanionNSFW('cuminass')>>\
<<set $ArousalPlayer = 0>><<set $playerFinished = true>>\
<<goto "CompanionScene">>\
<</button>>\
<</if>>\
\
<<if setup.hasCompanionNSFW('cumonface')>>\
<<button "Finish on Face">>\
<<run setup.pickCompanionNSFW('cumonface')>>\
<<set $ArousalPlayer = 0>><<set $playerFinished = true>>\
<<goto "CompanionScene">>\
<</button>>\
<</if>>\
\
<<if $playerFinished>>\
<div style="text-align:center; margin-top:1em;">\
<<button "End scene">>\
<<run setup.exitNSFWMusic()>>\
<<goto "companions">>\
<</button>>\
</div>\
<</if>><</if>>\<<widget InitCharVars>>
<<set _char = $args[0]>>
<<set State.temporary._char = _char>>
<<set State.temporary._data = State.variables.companionMedia[_char]>>
<<set State.temporary._rel = State.variables[_char + "Relation"] || 0>>
<<set State.temporary._aro = State.variables[_char + "Arousal"] || 0>>
<<set State.temporary._ene = State.variables.player.energy || 0>>
<</widget>><<nobr>><<widget "CompanionNSFWButtons">>
<<set _cfg = setup.actionsConfig || {}>>
<<set _id = $currentCompanion>>
<<set _npc = $npcs ? $npcs.find(n => n.id === _id) : null>>
<<set _gender = _npc?.gender || "female">>
<<set _textData = (_gender === "male") ? setup.textMale : setup.textFemale>>
<div class="nsfw-buttons" style="display:flex; flex-wrap:wrap; justify-content:center; gap:12px;">
<<for _key range Object.keys(_cfg)>>
<<set _act = _cfg[_key]>>
<<set _rel = ($companionRel && $companionRel[_id]) || 0>>
<<set _needRel = _act.requiredRelation || 0>>
<<set _needAro = _act.requiredArousal || 0>>
<<set _needEng = _act.energyCost || 0>>
<<set _genderOK = (!_act.allowedGenders || _act.allowedGenders.includes(_gender))>>
<<set _available = _genderOK and ($ArousalNPC >= _needAro) and ($player.energy >= _needEng) and (_rel >= _needRel)>>
<<set _tooltip = _available
? _act.label
: 'Locked'
+ (_genderOK ? '' : '\nWrong gender')
+ (_rel < _needRel ? '\nNeed Relation ' + _needRel : '')
+ ($ArousalNPC < _needAro ? '\nNeed Arousal ' + _needAro : '')
+ ($player.energy < _needEng ? '\nNeed Energy ' + _needEng : '')>>
<<set _icon = _available ? ('assets/ui/icons/' + _key + '.png') : 'assets/ui/icons/locked.png'>>
<<capture _key _act _available _tooltip _icon>>
<<print `
<img
src="${_icon}"
class="nsfw-action-icon"
title="${_tooltip}"
onclick="
if (!${_available}) return; /* zablokowane nic nie robi */
const vars = SugarCube.State.variables;
const setup = window.setup;
vars.lastActionKey = '${_key}';
vars.lastAction = '${_key}';
setup.resolveCompanionNSFWMedia();
vars.lastActionText = (
setup?.['${_gender}' === 'male' ? 'textMale' : 'textFemale']?.['${_key}']?.random?.()
) || '⚠️ Missing text for ${_key}';
vars.ArousalNPC += ${_act.gainArousal || 0};
vars.player.energy -= ${_act.energyCost || 0};
vars.ArousalPlayer = (vars.ArousalPlayer || 0) + (${_act.playerArousalGain || 0});
vars.companionRel = vars.companionRel || {};
const id = vars.currentCompanion;
if (id) {
const cur = Number(vars.companionRel[id] || 0);
const delta = Number(${_act.gainRelation || 0});
vars.companionRel[id] = Math.max(0, Math.min(100, cur + delta));
}
vars.fuckPussyAction = ('${_key}' === 'fuckPussy');
vars.fuckAssAction = ('${_key}' === 'fuckAss');
setup.advanceTime(${_act.timeCost || 1});
SugarCube.Engine.play('CompanionScene');
">
`>>
<</capture>>
<</for>>
</div>
<</widget>><</nobr>>
<<nobr>><<widget "bubbleProgress">>
<<set _char = ($args.length > 0) ? $args[0] : $currentCompanion>>
<<if _char>>
<<set _val = ($companionRel and $companionRel[_char]) ? $companionRel[_char] : 0>>
<<set _val = Math.max(0, Math.min(100, Math.round(_val)))>>
<<print setup.bubbleBar(_val)>>
<</if>>
<</widget>><</nobr>><<nobr>><<widget "circularBar">>
<<set _char = ($args.length > 0) ? $args[0] : $currentCompanion>>
<<if _char>>
<<set _rel = ($companionRel and $companionRel[_char]) ? $companionRel[_char] : 0>>
<<set _percent = Math.min(100, Math.round(_rel))>>
<<set _color = _percent < 33 ? "red"
: _percent < 66 ? "orange"
: "green">>
<<print
'<div class="progress-circle" '
+ 'style="--percent:' + _percent + '; --color:' + _color + ';">'
+ '<span class="label">' + _percent + '%</span>'
+ '</div>'
>>
<</if>>
<</widget>><</nobr>>{
"introText": [
"She looked at you waiting for your move."
],
"chat": [
"You started talking about recent events in the bunker.",
"She asked you if you slept well.",
"She asked if you remembered what day it was.",
"You chatted about your favorite meals before the catastrophe.",
"She wondered if there's still a world left outside the bunker."
],
"flirt": [
"She smiled flirtatiously and asked if you often look like that.",
"She gently touched your hand and looked into your eyes.",
"She gave you a playful wink as she walked past.",
"She leaned in, brushing your arm with hers.",
"She twirled a strand of hair and said you looked stronger today."
],
"kiss": [
"She leaned closer and kissed you gently.",
"Her lips trembled against yours.",
"She paused, looking into your eyes before slowly leaning in.",
"You both moved closer until your lips met in silence.",
"She gave you a short, warm kiss and smiled."
],
"teasing": [
"She playfully brushed her hand along your arm, smirking.",
"Her eyes lingered on you as she bit her lip mischievously.",
"She leaned closer, whispering something that made your heart race.",
"She started undressing, showing you her body.",
"She gave you a sly smile, clearly enjoying making you wait."
],
"blowjob": [
"She got down slowly and opened her mouth. Her tongue traced the outline of your member before taking it into her hot, moist mouth.",
"Her eyes locked onto yours as she started bobbing her head up and down, taking more of you in with each movement.",
"You watched in awe as she expertly suckled on your cock, her cheeks hollowing out with each deep thrust of her head.",
"Feeling yourself about to climax, you reached out to touch her hair, but she pulled away with a teasing smile.",
"She released you from her mouth and looked up at you, a mischievous glint in her eye. 'Is that all you've got?' She purred."
],
"touchAss": [
"You circled her waist with your hand, feeling the softness of her skin.",
"She leaned back against the wall, arching her hips slightly to give you better access.",
"Her breath quickened as you traced small circles around her ass cheeks.",
"Without warning, she pressed herself into your touch, moaning softly in pleasure.",
"You took this as a cue to explore further, slipping one finger inside her panties and teasing her sensitive entrance."
],
"touchPussy": [
"Your fingers touched her throbbing vagina.",
"You slipped your hand under her dress and felt the moist warmth",
"You rubbed her naked curves with your fingers.",
"Her soft lips curled into a gentle smile."
],
"handjob": [
"Her hand caresses your body, rubbing against your hard shaft.",
"Her sensual hand guides your member, gently scrubbing it.",
"Her warm hands pull you toward her, nestling into your crotch.",
"The quick strokes of her fingers make your body tremble with pleasure."
],
"touchTits": [
"You circled her chest with your hands, feeling the softness of her skin. She arched into your touch, moaning softly in pleasure.",
"Her breath quickened as you brushed against a particularly sensitive nipple.",
"You squeezed her boobs making her moan."
],
"lickNipples": [
"You leaned down, taking one of her hard nipples between your lips. You circled it with your tongue, teasing and flicking against the sensitive tip.",
"She moaned loudly, arching her back and pressing her chest further into your face."
],
"lickYourAss": [
"You told her to lick your ass and so she did.",
"Her tongue performs a magical dance between your buttocks.",
"Despite the initial discomfort, you found yourself beginning to relax into the sensation.",
"As she focused on stimulating your prostate, you felt a wave of pleasure wash over you that left you breathless.",
"Her tongue movements were steady and rhythmic, drawing out moans from deep within you."
],
"fingerPussy": [
"You circled her pussy with your fingers, feeling the softness of her skin. She arched into your touch, moaning softly in pleasure.",
"Her breath quickened as you brushed against a particularly sensitive area."
],
"fistPussy": [
"You smashed her pussy with your fist, feeling the wetness of her juices. She arched into your touch, moaning loudly in pleasure.",
"Her breath quickened as you thrust deeper inside her."
],
"fingerAss": [
"You circled her ass with your fingers, feeling the softness of her skin. She arched back against the wall, inviting you to explore further.",
"Her breath quickened as you brushed against a particularly sensitive area."
],
"fistAss": [
"You devastated her ass with your fist, feeling the firmness of her muscles. She arched back, moaning in pleasure as you pushed deeper inside.",
"Her breath quickened and her body trembled with anticipation."
],
"fingerYourAss": [
"You tensed up at the unexpected sensation of her fingers circling around your tight entrance.",
"You took a deep breath and she slowly began pushing one finger inside of you, causing you to gasp in both pain and pleasure.",
"You heard her breathing became ragged as she moved in and out of you faster, eliciting soft moans from you.",
"Despite the initial discomfort, you couldn't help but feel a strange mix of pleasure and excitement."
],
"fistYourAss": [
"Without warning, she thrust her entire fist into your tight hole, causing you to cry out in pain mixed with pleasure.",
"Her knuckles brushed against something deep inside of you as she began pumping her fist in and out rapidly.",
"You arched your back involuntarily, meeting each of her thrusts with a loud moan that filled the room.",
"The sensation of being so completely filled and dominated left you trembling and aching for release."
],
"lickPussy": [
"You circled her pussy with your tongue, teasing and flicking against the sensitive skin. She moaned loudly in pleasure.",
"Her breath quickened and her hips bucked against your face."
],
"lickAss": [
"You licked her ass, tracing small circles around her tight entrance. She moaned in pleasure as you pushed deeper inside.",
"Her breath quickened and she arched back into you."
],
"fuckPussy": [
"You positioned yourself between her legs and slowly pushed inside her wet pussy. She moaned loudly in pleasure as you began thrusting deeper.",
"Her pussy tightened around your cock, pulling you closer to her core. The sensation was overwhelming, sending waves of pleasure coursing through your body.",
"You increased the pace, slamming into her over and over again. She met your thrusts with equal force, their bodies moving in perfect syncopation.",
"Her moans turned to gasps as you reached deeper inside her than ever before. The feeling of being completely filled by you sent shivers down her spine.",
"As you approached your climax, you gripped her hips tighter and began pounding into her with all your might. She screamed in ecstasy as she felt the wave of pleasure wash over them both."
],
"fuckAss": [
"You positioned yourself behind her and lifted her leg up. With one hand, you spread her cheeks apart to reveal her tight little hole.",
"Slowly, you pushed your cock inside her ass. At first, it felt tight and resistant, but as she adjusted to the intrusion, she began to relax into it.",
"You picked up the pace, slamming into her rhythmically. The sound of skin hitting skin echoed throughout the room, adding to their intense pleasure.",
"Her body arched backward in response to your thrusts, driving you deeper inside her.The sensation was unlike anything either of you had ever experienced before.",
"As you neared your climax, you pulled out slightly and then plunged back into her ass with all your might. She screamed out in pleasure as she felt the full force of your orgasm shooting deep inside her."
],
"fuckTits": [
"You pushed your cock between her breasts and started thrusting.",
"She wrapped her boobs around your cock and started stroking it."
],
"spit": [
"You moved closer to her and leaned down, spitting onto the center of her forehead. The saliva dripped down onto her skin, creating a small puddle.",
"Slowly, you traced your finger along the path of the spit, drawing a line from her forehead down towards her chin. Her body trembled in anticipation of what was to come.",
"You repeated the process with both hands, creating a web of saliva on her face. Then, you leaned in close and whispered against her ear.",
"As you pulled back slightly, she opened her eyes wide and gasped for air. The unexpected sensation had shocked her but also ignited something within her."
],
"spankAss": [
"You moved behind her and raised your hand, causing her to tense up slightly. Then, you brought it down hard on her round ass cheek. The sound of skin smacking against skin reverberated through the room.",
"She yelped in surprise at the sting, but then moaned as she felt the heat radiating from her now reddened flesh. You continued spanking her in a steady rhythm.",
"After several more hard smacks, you pulled her panties down to her ankles and resumed spanking her bare ass. The slapping sound became louder with each smack, adding to the intensity of the situation.",
"Her body began to tremble as she felt your hand connecting with her flesh over and over again. She gasped for air between moans, begging you not to stop."
],
"slap": [
"You moved slowly towards her, not wanting to startle her. When you were close enough, you leaned in and slapped her across the cheek hard enough to leave a red handprint.",
"She let out a gasp of surprise but remained still as she looked up at you with wide eyes filled with confusion and perhaps even a hint of arousal.",
"You didn't say anything, instead choosing to trail your fingers lightly down her cheek where you had just slapped her. The gentle touch contrasted sharply against the sting in her skin.",
"As she continued to gaze up at you, you noticed a slight flush appear on her neck and face. It was clear that this wasn't something she was used to or comfortable with yet.",
"Without breaking eye contact, you reached out and gently brushed a strand of hair behind her ear before leaning in close enough for your breath to caress her skin softly. The mix of tenderness and dominance left her feeling both scared and turned on at the same time."
],
"choke": [
"You moved behind her, placing your hands around her neck firmly but not too tightly. Your thumbs rested lightly against the side of her throat as you leaned in close to whisper into her ear.",
"The warmth from your breath sent shivers down her spine as she felt the power emanating from your touch. She couldn't help but squirm slightly under your grasp, wanting more yet afraid of what might happen next.",
"As you continued to hold her in this position, you noticed how responsive she was becoming despite herself. Her breathing had become shallow and rapid, indicating that she was aroused despite the fear coursing through her veins.",
"You pulled back slightly, allowing just enough air for her to catch her breath before leaning in close again. This time, you pressed your lips against hers roughly, forcing your tongue into her mouth.",
"Her body went limp in surprise at first but then began to respond eagerly as she gave herself over completely to the sensations coursing through her. The combination of pain and pleasure left her reeling, unable to think clearly or resist any longer."
],
"finishhersex": [
"She came hard on your dick."
],
"finishher": [
"She came hard."
],
"cumonface": [
"You sprayed your cum on her face."
],
"cuminpussy": [
"You moaned and pushed your load straight into her pussy."
],
"cuminass": [
"You smashed her tight ass and left your load inside."
],
"ending": [
"After everything, she sits there, watching you quietly.",
"You both take a breath. The air feels warmer now."
]
}{
"introText": [
"He watched and waited to see what you would do."
],
"kiss": [
"He moved closer and brushed his lips against yours gently.",
"His breath was hot against your skin as he leaned into the kiss.",
"The tension between you both grew palpable as he hesitated for a moment",
"Suddenly, he closed the distance and their lips met passionately.",
"You could feel his heart racing beneath your touch."
],
"blowjob": [
"He knelt down in front of you, his eyes never leaving contact with yours.",
"Slowly, he took your erect shaft into his mouth, stretching his lips around it.",
"As he began to bob his head up and down, sucking gently on the tip of your cock, you felt a wave of pleasure wash over you.",
"You placed your hands on the back of his head, urging him to go faster or harder as desired.",
"His warm saliva dripped down onto your stomach, adding to the sensation."
],
"touchAss": [
"You squeezed his glutes hard.",
"You got a nice feel of his bum.",
"The sensation of being touched intimately ignited something within him, making him even more aroused."
],
"lickNipples": [
"You started licking his nipples making him hard.",
"He reacted positively to your wet tongue on his nipples."
],
"touchCock": [
"You wrapped your hands around his erect shaft and began stroking it slowly.",
"His breath hitched as you gripped him tighter, increasing the intensity of his pleasure.",
"He closed his eyes and moaned softly, losing himself in the sensation of being touched intimately.",
"You moved your hands up and down his shaft, feeling the heat radiating from it.",
"As he grew closer to reaching climax, you sped up your strokes, matching the pace of his rapid breathing."
],
"fingerAss": [
"You slowly inserted one finger into his tight hole, feeling him tense up at first but then begin to relax.",
"As he adjusted to the intrusion, you added another finger and began moving them in and out of his ass.",
"His breathing became faster, and he bit down on his lip to stifle a moan.",
"You could feel how hot and wet he was becoming inside and outside.",
"The sensation of being touched so intimately ignited something deep within him that made him tremble with anticipation."
],
"fingerYourAss": [
"You tensed up at the unexpected sensation of his fingers circling around your tight entrance.",
"He took a deep breath and slowly began pushing one finger inside of you, causing you to gasp in both pain and pleasure.",
"As he found a rhythm that felt good for both of you, you began to relax more into his touch.",
"His breathing became ragged as he moved in and out of you faster, eliciting soft moans from deep within him.",
"Despite the initial discomfort, you couldn't help but feel a strange mix of pleasure and excitement."
],
"fistYourAss": [
"He moved closer and placed both hands on your ass cheeks, spreading them wide open.",
"Without warning, he thrust his entire fist into your tight hole, causing you to cry out in pain mixed with pleasure.",
"His knuckles brushed against something deep inside of you as he began pumping his fist in and out rapidly.",
"You arched your back involuntarily, meeting each of his thrusts with a loud moan that filled the room.",
"The sensation of being so completely filled and dominated left you both trembling and aching for release."
],
"fistAss": [
"You leaned forward and wrapped your hand around his erect shaft, feeling the heat radiating from it.",
"Slowly, you began pushing your fist into his tight hole, watching as he bit down on his lip to stifle a moan.",
"As you felt him adjust to the intrusion, you increased the intensity of your movements, matching the pace of his rapid breathing.",
"His body shook with each thrust, and his moans grew louder."
],
"lickAss": [
"You moved closer and slowly ran your tongue along his tight entrance, tasting the sweetness between his cheeks.",
"His breath hitched as you began to lap at him, circling your tongue around his anus with increasing intensity.",
"He squirmed slightly, unable to contain the pleasure coursing through his body.",
"As your tongue made contact with his prostate, he let out a soft moan that vibrated through you."
],
"lickYourAss": [
"You tensed up at the unexpected touch as his tongue circled around your tight entrance.",
"He slowly began to lap at you, causing a shiver to run down your spine.",
"Despite the initial discomfort, you found yourself beginning to relax into the sensation.",
"As he focused on stimulating your prostate, you felt a wave of pleasure wash over you that left you breathless.",
"His tongue movements were steady and rhythmic, drawing out moans from deep within you."
],
"suckCock": [
"You leaned forward and took him into your mouth, feeling the heat of his shaft against your tongue.",
"Slowly, you began to bob your head up and down on his erect cock, matching the pace of his rapid breathing.",
"His hips buckled slightly as he lost control of himself in your mouth.",
"As you sucked harder, you could feel the veins bulging on his shaft, signaling that he was close to reaching climax.",
"The sensation of being so completely worshipped left him weak-kneed and begging for more."
],
"fuckAss": [
"You positioned yourself behind him and slowly began to push your erect shaft into his tight hole.",
"He let out a soft moan as you entered him, feeling the fullness spread through his body.",
"As you picked up speed, slamming into him harder and deeper with each thrust, he bit down on his lip to stifle his cries of pleasure.",
"His ass clenched around you, urging you to go faster as he felt himself losing control.",
"The sensation of being filled so completely and powerfully left him both aroused and overwhelmed."
],
"fuckYourAss": [
"You tensed up at the sudden invasion as he began to thrust his hips into you roughly.",
"His erect cock slammed against your prostate with each forceful stroke, causing waves of pleasure to wash over you.",
"Despite the initial pain, you found yourself beginning to enjoy the sensation of being taken so completely and roughly.",
"As he pounded into you faster and harder, you felt yourself losing control, moaning loudly with each thrust that hit your sweet spot.",
"The rough sex left both of you breathless and aching for release."
],
"spit": [
"You leaned in close and spat directly onto his face, watching as he flinched at the unexpected sensation.",
"He closed his eyes tightly, trying to block out the saliva dripping down his cheeks.",
"Despite his discomfort, you couldn't help but feel a twisted sense of power and dominance in that moment.",
"You spat in his face as he opened his mouth to speak, ready to continue your rough and intimate encounter."
],
"spankAss": [
"You raised your hand high above his exposed ass cheeks and brought it down hard, leaving a bright red mark on his skin.",
"He let out a yelp of pain mixed with pleasure as he felt the sting radiate through his body.",
"Despite the initial shock, he found himself begging for more, arching his back in anticipation of another smack.",
"As you continued to spank him in time with your thrusts, he lost control completely, crying out with each impact and orgasmming hard around your cock."
],
"slap": [
"You raised your hand high above his face and brought it down hard, leaving a loud smack echoing in the room.",
"His eyes widened in shock as he felt the sting on his cheek, but there was also an undeniable rush of adrenaline and arousal coursing through him.",
"Despite the initial surprise, he couldn't help but moan softly at the mix of pain and pleasure that accompanied the slap.",
"As you continued to dominate him physically and sexually, pushing him further than he ever thought possible, he found himself falling deeper under your spell."
],
"choke": [
"You grabbed him by the throat, cutting off his air supply momentarily as you looked into his eyes with a mix of lust and power.",
"His face flushed red from lack of oxygen, but he didn't struggle or beg for release; instead, he met your gaze with an almost hungry look in his eyes.",
"As you released him slightly, allowing him to gasp for air, you continued to dominate him both physically and sexually, taking him to heights of pleasure he never knew existed.",
"Their encounter was intense and primal, leaving them both breathless and spent."
],
"finishhimanal": ["He groans and finishes while thrusting into you."],
"finishhimsex": ["He cums as you fuck his ass hard."],
"finishhimoral": ["He grunts and finishes in your mouth."],
"finishhim": ["He finishes all over you."],
"cumonface": ["You finish on his face."],
"cummouth": ["You finish in his mouth."],
"cuminass": ["You finish inside his ass."]
}<<set $trainPage = $trainPage ?? 0>>\
<<set _pageSize = 3>>\
<<set _entries = ["__solo__"].concat($player.companions)>>\
<<set _total = _entries.length>>\
<<set _pageCount = Math.ceil(_total / _pageSize)>>\
<<set $trainPage = Math.clamp($trainPage, 0, _pageCount - 1)>>\
<<set _start = $trainPage * _pageSize>>\
<<set _slice = _entries.slice(_start, _start + _pageSize)>>\
\
<h2>Who do you want to train your <<= $trainingStat >> with?</h2>
<div class="training-grid">\
<<for _e range _slice>>\
<<if _e === "__solo__">>\
<div class="training-tile">\
<a class="companion-link"
data-passage="Training"
data-setter="$trainingPartner = null;">\
<<print '<img src="assets/ui/alone.jpg" alt="Train alone">'>>\
<div class="label">Train Alone</div>\
</a>\
</div>\
<<else>>\
<<set _npc = $npcs.find(n => n.id === _e)>>\
<<if _npc>>\
<<capture _id>>\
<<set _id = _e>>\
<<set _stats = setup.getCompanionStats ? setup.getCompanionStats(_id) : {strength:0,endurance:0,intelligence:0}>>\
<div class="training-tile">\
<div class="mini-chips">\
<span class="mini-chip <<= $trainingStat === 'strength' ? 'is-primary' : '' >>"><span class="icon">💪</span><span class="val"><<= _stats.strength>></span></span>
<span class="mini-chip <<= $trainingStat === 'endurance' ? 'is-primary' : '' >>"><span class="icon">🏃</span><span class="val"><<= _stats.endurance>></span></span>
<span class="mini-chip <<= $trainingStat === 'intelligence' ? 'is-primary' : '' >>"><span class="icon">🧠</span><span class="val"><<= _stats.intelligence>></span></span>
</div>\
<a class="companion-link"
data-passage="Training"
data-setter="$trainingPartner = _id;">\
<<print '<img src="assets/characters/' + _id + '/training.jpg" alt="Train with ' + _npc.name + '">'>>\
<div class="label"><<=_npc.name>></div>\
</a>\
</div>\
<</capture>>\
<</if>>\
<</if>>\
<</for>>\
</div>\
<div class="pager"><<if $trainPage > 0>><<button "← Prev">><<set $trainPage -= 1>><<goto "TrainingSelectPartner">><</button>><</if>><<if ($trainPage + 1) < _pageCount>><<button "Next →">><<set $trainPage += 1>><<goto "TrainingSelectPartner">><</button>><</if>></div>
<<button "Back">><<goto "training room">><</button>>
<<include "SleepLogic">><center><img src="assets/ui/dreams/dream.gif"></center>
You went to bed, but considering recent events, you didn't sleep very well.
<<button "Next">><<goto "Bunker">><</button>><<widget "DreamGif">><<set _list = [
"assets/ui/dreams/dream1.gif",
"assets/ui/dreams/dream2.gif",
"assets/ui/dreams/dream3.gif"
]>>
<<set _gif = _list.random()>>
<<print '<img src="' + _gif + '" class="dream-gif">'>>
<</widget>>[
{
"id": "generousNeighbor",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
30,
90
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. In front of the bunker, you noticed a friendly-looking figure. You hear loud banging on the bunker hatch.",
"imageWithCamera": "assets/characters/neighbor/cameragenerous.jpg",
"minReputation": 0,
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "generousNeighbor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "needyNeighborItem",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
},
{
"type": "statBoost",
"statPool": [
"intelligence",
"endurance",
"strength"
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameraneedy.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You noticed a couple of people who looked friendly.",
"minReputation": 0,
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "needyNeighbor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "needyNeighbor",
"effects": [
{
"type": "statBoost",
"statPool": [
"intelligence",
"endurance",
"strength"
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameraneedy.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You noticed a couple of people who looked friendly.",
"minReputation": 0,
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "needyNeighbor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "hornyNeighbor",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
},
{
"type": "randomRoll5050",
"randomKey": "hornyRoll"
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameraHorny.webp",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You notice a woman who looks horny.",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "hornyNeighbor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "bunkerBandits",
"effects": [],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameraBandits.webp",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You noticed a few men who looked like bandits.",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "bunkerBandits"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "bunkerSoldiers",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
},
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
50,
120
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/soldier.webp",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You noticed a soldier, but you felt that he was not alone.",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "bunkerSoldiers"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "hiddenStash",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
50,
120
]
},
{
"type": "randomRoll5050",
"randomKey": "stashRoll"
},
{
"type": "statChange",
"healthRange": [
-10,
-1
]
}
],
"image": "assets/characters/neighbor/hiddenStash.webp",
"title": "Hidden stash",
"text": "While cleaning up, you came across some hidden supplies that you had forgotten about.",
"repeatable": true,
"choices": [
{
"text": "Open it",
"passage": "hiddenStash"
},
{
"text": "Leave it alone",
"passage": "Bunker"
}
]
},
{
"id": "oldManual",
"image": "assets/characters/neighbor/book.jpg",
"title": "Old manual",
"text": "While cleaning up, you came across some old manual book.",
"repeatable": true,
"effects": [
{
"type": "statBoost",
"statPool": [
"intelligence"
]
}
],
"choices": [
{
"text": "Read it",
"passage": "manualRead",
"applyEffects": true
},
{
"text": "Toss it",
"passage": "Bunker"
}
]
},
{
"id": "spoiledFood",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qtyRange": [
1,
3
]
}
]
}
],
"image": "assets/characters/neighbor/checkFood.jpg",
"title": "Spoiled food",
"text": "You smelled something. It must be the food supplies.",
"repeatable": true,
"minItem": {
"cannedFood": 1
},
"choices": [
{
"text": "Inspect the supplies",
"passage": "checkSpoiledFood"
},
{
"text": "Throw them away",
"passage": "removeSpoiledFood"
}
]
},
{
"id": "ratInfestation",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qtyRange": [
1,
3
]
}
]
}
],
"image": "assets/characters/neighbor/rats.webp",
"title": "Rats",
"text": "You noticed rats running around the bunker.",
"repeatable": true,
"minItem": {
"cannedFood": 1
},
"choices": [
{
"text": "Set traps",
"passage": "ratTrap"
},
{
"text": "Burn infested food",
"passage": "ratBurn"
}
]
},
{
"id": "toxicGasWarning",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
80,
150
]
}
],
"image": "assets/characters/neighbor/toxicGas.webp",
"title": "Toxic Warning",
"text": "A sudden high-pitched siren echoed through the bunker walls. Seconds later, green gas began seeping in through the air vents. You rushed to the control panel and managed to shut off the flow.You wonder if stepping outside would reveal the source of the alert.",
"textWithCamera": "Your camera detected no movement near the hatch. Yet, green gas lingers around the vents. The siren still rings in your ears.",
"imageWithCamera": "assets/characters/neighbor/toxicGas.webp",
"minReputation": 0,
"repeatable": true,
"choices": [
{
"text": "Put on gas mask and step outside",
"passage": "toxicGasLoot",
"condition": "$gasMask > 0"
},
{
"text": "Stay inside and wait",
"passage": "Bunker"
}
]
},
{
"id": "dullKnife",
"minItem": {
"knife": 1
},
"image": "assets/characters/neighbor/brokenKnife.webp",
"title": "Dull Blade",
"text": "You realise that your knife blade is losing its edge. In this state, it's useless in a fight.",
"repeatable": false,
"choices": [
{
"text": "Try to fix it",
"condition": "$scrapMetal > 0",
"passage": "knifeFix"
},
{
"text": "Leave it be",
"passage": "knifeIgnore"
}
]
},
{
"id": "wetMapCorner",
"title": "Wet map",
"image": "assets/characters/neighbor/brokenMap.jpg",
"text": "While examining your map, you tore one corner. Moments later, you knocked over a cup of water, soaking it. The ink is already smudging.",
"repeatable": false,
"minItem": {
"map": 1
},
"choices": [
{
"text": "Patch it",
"passage": "mapFix"
},
{
"text": "Throw it",
"passage": "mapIgnore"
}
]
},
{
"id": "brokenSuitcaseHandle",
"title": "Broken Handle",
"image": "assets/characters/neighbor/suitcaseBroken.jpg",
"text": "While sprinting, the handle of your suitcase gave in with a loud snap. Carrying it like this will be cumbersome.",
"repeatable": false,
"minItem": {
"suitcase": 1
},
"choices": [
{
"text": "Fix it",
"passage": "suitcaseFix"
},
{
"text": "Leave it broken",
"passage": "suitcaseIgnore"
}
]
},
{
"id": "tornBackpack",
"title": "Torn Backpack",
"image": "assets/characters/neighbor/bagBroken.jpg",
"text": "As you squeezed through a tight corridor, your backpack caught on something sharp and tore open.",
"repeatable": false,
"minItem": {
"bag": 1
},
"choices": [
{
"text": "Sew it carefully",
"passage": "backpackFix"
},
{
"text": "Leave it behind",
"passage": "backpackIgnore"
}
]
},
{
"id": "damagedPistol",
"title": "Jammed Gun",
"image": "assets/characters/neighbor/pistolBroken.jpg",
"text": "Your pistol misfired. It’s dirty, and the mechanism seems worn down. You fear it might backfire next time.",
"repeatable": false,
"minItem": {
"pistol": 1
},
"choices": [
{
"text": "Disassemble and repair it",
"condition": "$scrapMetal > 0",
"passage": "pistolFix"
},
{
"text": "Discard it",
"passage": "pistolIgnore"
}
]
},
{
"id": "crackedBat",
"title": "Cracked Bat",
"image": "assets/characters/neighbor/batBroken.jpg",
"text": "After smashing something too hard, your bat now has a long split down its middle. One more hit and it might shatter.",
"repeatable": false,
"minItem": {
"bat": 1
},
"choices": [
{
"text": "Reinforce it",
"condition": "$wood > 0",
"passage": "batFix"
},
{
"text": "Toss it",
"passage": "batIgnore"
}
]
},
{
"id": "leakingBottle",
"title": "Leaking Bottle",
"image": "assets/characters/neighbor/waterBroken.jpg",
"text": "You notice a slow drip from your water bottle. The cap seems loose or cracked.",
"repeatable": false,
"minItem": {
"water": 1
},
"choices": [
{
"text": "Seal it with some scrap",
"condition": "$scrapMetal > 0",
"passage": "waterFix"
},
{
"text": "Drink what you can and toss it",
"passage": "waterIgnore"
}
]
},
{
"id": "moldyBandages",
"title": "Moldy Bandages",
"image": "assets/characters/neighbor/bandageBroken.jpg",
"text": "You check your medical box and discover that some bandages are damp and growing mold.",
"repeatable": false,
"minItem": {
"bandage": 1
},
"choices": [
{
"text": "Dry them near a heat source",
"passage": "bandageFix"
},
{
"text": "Toss the moldy ones",
"passage": "bandageIgnore"
}
]
},
{
"id": "expiredMedkit",
"title": "Expired Medkit",
"image": "assets/characters/neighbor/firstAidFix.jpg",
"text": "While organizing your supplies, you notice the medkit is past its expiration date.",
"repeatable": false,
"minItem": {
"firstAid": 1
},
"choices": [
{
"text": "Keep it - it might still work",
"passage": "medkitKeep"
},
{
"text": "Dismantle for useful parts",
"passage": "medkitScrap"
}
]
},
{
"id": "flickeringFlashlight",
"title": "Flickering Flashlight",
"image": "assets/characters/neighbor/flashlightBroken.jpg",
"text": "Your flashlight started flickering, making it unreliable for exploration.",
"repeatable": false,
"minItem": {
"flashlight": 1
},
"choices": [
{
"text": "Open and try to repair it",
"condition": "$scrapMetal > 0",
"passage": "flashlightFix"
},
{
"text": "Toss it away",
"passage": "flashlightIgnore"
}
]
},
{
"id": "strangerWomanKnockWhite",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A woman stands outside, looking exhausted but harmless. She keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbegging.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerWomanRequestWhite"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerManKnockWhite",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A man stands outside, looking exhausted but harmless. He keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarsad.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerManRequestWhite"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerWomanKnockBlack",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A woman stands outside, looking exhausted but harmless. She keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbeggingblack.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerWomanRequestBlack"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerManKnockBlack",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A man stands outside, looking exhausted but harmless. He keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarblackmanbeg.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerManRequestBlack"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerWomanKnockAsian",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A woman stands outside, looking exhausted but harmless. She keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbeggingasian.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerWomanRequestAsian"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerShemaleRequest",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You decided to use your camera before opening it. A woman was standing outside and smiling at the camera.",
"imageWithCamera": "assets/characters/neighbor/shemaleRequest.webp",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerShemaleRequest"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "travelerWithCaptive",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the camera, you noticed a man wearing a gas mask carrying a woman in his arms.",
"imageWithCamera": "assets/characters/neighbor/cameraTravelerWithCaptive.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "travelerWithCaptive"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "hungryOrphans",
"effects": [],
"image": "assets/characters/neighbor/softknock.jpg",
"imageWithCamera": "assets/characters/neighbor/hungryOrphans.jpg",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"textWithCamera": "You peek through the camera. A group of ragged children are outside your bunker. Thin, cold, and clearly starving. They hold up empty cans, hoping for mercy.",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "hungryOrphans"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "manSellingWife",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qty": [
3
]
}
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameragenerous.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. In front of the bunker, you noticed a friendly-looking figure. You hear loud banging on the bunker hatch.",
"repeatable": true,
"choices": [
{
"text": "Open it",
"passage": "manSellingWife"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "gangSurvivor",
"title": "Soft knocking",
"image": "assets/characters/neighbor/softknock.jpg",
"text": "You hear soft knocking on the bunker hatch. Someone is gently trying to get your attention.",
"textWithCamera": "You turn on the camera. A wounded man slumps against the hatch, blood on his clothes. His breathing is shallow.",
"imageWithCamera": "assets/characters/neighbor/cameraGangSurvivor.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "gangSurvivor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "knifeWoman",
"title": "Loud banging",
"image": "assets/characters/neighbor/banging.jpg",
"text": "You hear loud banging on the bunker hatch. Whoever it is, they want in - badly.",
"textWithCamera": "Looking through the camera, you spotted a frail-looking woman. She appeared desperate, pacing nervously in front of the bunker hatch. One of her hands was hidden behind her back.",
"imageWithCamera": "assets/characters/neighbor/womanGenerator.webp",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "knifeWoman"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "silenceAfterStorm",
"title": "Silence After the Storm",
"image": "assets/characters/neighbor/silenceAfterStorm.webp",
"text": "After several nights of howling winds and thunder shaking the bunker walls, the world outside has gone completely silent. No rain. No wind. No birds. Just… Stillness.",
"textWithCamera": "The camera shows an eerily still landscape. Mud and broken branches litter the area, but not a soul is in sight. The silence is deafening.",
"imageWithCamera": "assets/characters/neighbor/cameraSilenceAfterStorm.webp",
"repeatable": false,
"choices": [
{
"text": "Continue",
"passage": "Bunker"
}
]
},
{
"id": "distantScream",
"title": "Distant Scream",
"image": "assets/characters/neighbor/scream.jpg",
"text": "You hear a scream in the distance. Sharp. Human. Then… A gunshot. Then silence.",
"textWithCamera": "The camera picks up nothing but fog and faint rustling. Whatever happened, it’s over now. The silence that follows is somehow worse.",
"imageWithCamera": "assets/characters/neighbor/cameraDistantScream.jpg",
"repeatable": false,
"choices": [
{
"text": "Continue",
"passage": "Bunker"
}
]
},
{
"id": "blockedHatch",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
50,
150
]
}
],
"title": "Loud Banging",
"image": "assets/characters/neighbor/banging.jpg",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera showed a dirty man holding a crowbar. He was staring directly into the lens, gesturing wildly as if trying to point you toward something across the street.",
"imageWithCamera": "assets/characters/neighbor/cameraBlockedHatch.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "blockedHatch"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "trappedChild",
"title": "Loud Banging",
"image": "assets/characters/neighbor/banging.jpg",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera revealed a desperate woman, slamming her fists against the hatch and waving her hands toward the lens, pleading as if begging for help.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbegging.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "trappedChild"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "subtleCoughing",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": [
{
"id": "goldWatch",
"qty": [
1
]
},
{
"id": "goldRing",
"qty": [
1
]
}
]
}
],
"title": "Soft knocking",
"image": "assets/characters/neighbor/softknock.jpg",
"text": "You hear soft knocking on the bunker hatch. Someone is gently trying to get your attention.",
"textWithCamera": "The camera shows an old man sitting by the bunker wall. He is wrapped in rags and trembling. He softly knocks, coughs, and stares directly at the camera.",
"imageWithCamera": "assets/characters/neighbor/cameraGangSurvivor.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "subtleCoughing"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "womanGenerator",
"title": "Loud Banging",
"image": "assets/characters/neighbor/banging.jpg",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the camera feed, a desperate woman is hammering at the hatch with both fists. A battered car is parked behind her, trunk wide open. She keeps turning around, pointing toward it, and gesturing frantically at the camera.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbegging.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "womanGenerator"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "sickMan",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "On the camera feed, a sweating man lies on the ground, clearly feverish. He clutches his side and murmurs incoherently, occasionally reaching toward the hatch.",
"imageWithCamera": "assets/characters/neighbor/cameraGangSurvivor.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "sickMan"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "guardianAngel",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. In front of the bunker, you noticed a figure running away. Only a cute-looking cat remained under the hatch.",
"imageWithCamera": "assets/characters/neighbor/guardianAngel.webp",
"repeatable": false,
"choices": [
{
"text": "Open It",
"passage": "guardianAngel"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "recruitVisit",
"effects": [
{
"type": "newCompanion"
}
],
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"image": "assets/characters/neighbor/banging.jpg",
"textWithCamera": "Before opening it, you decided to use your camera. In front of the bunker, you noticed a friendly looking person.",
"imageWithCamera": "assets/characters/neighbor/recruitDecision.jpg",
"repeatable": true,
"isRecruit": true,
"choices": [
{
"text": "Open It",
"passage": "RecruitDecision"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "earthquakeTremor",
"title": "Earthquake Tremor",
"image": "assets/characters/neighbor/earthquakeTremor.webp",
"text": "The ground shuddered. Dust rained from the ceiling. Something heavy toppled over in the storage room.",
"repeatable": true,
"minItem": {
"cannedFood": 1,
"water": 1
},
"effects": [
{
"type": "statChange",
"healthRange": [
-5,
-1
]
},
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qtyRange": [
1,
2
]
},
{
"id": "water",
"qtyRange": [
1,
2
]
}
]
}
],
"choices": [
{
"text": "Continue",
"passage": "earthquakeTremor",
"applyEffects": true
}
]
},
{
"id": "waterLeak",
"title": "Water Leak",
"image": "assets/characters/neighbor/waterLeak.webp",
"text": "A pipe inside the wall burst. A puddle spreads under your shelves as precious water trickles away.",
"repeatable": true,
"minItem": {
"water": 1
},
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "water",
"qtyRange": [
1,
3
]
}
]
}
],
"choices": [
{
"text": "Continue",
"passage": "waterLeak"
}
]
},
{
"id": "quietGift",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows an empty street. Whoever left the parcel is long gone.",
"imageWithCamera": "assets/characters/neighbor/quietGift.jpg",
"repeatable": false,
"minReputation": 1,
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
40,
90
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "quietGift"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "warningShout",
"title": "Warning Shout",
"image": "assets/characters/neighbor/warningShout.jpg",
"text": "A voice outside shouts a warning about raiders nearby. Then, silence.",
"textWithCamera": "The camera catches a fleeting shadow sprinting past the lens, then nothing.",
"imageWithCamera": "assets/characters/neighbor/warningShout.jpg",
"repeatable": true,
"minReputation": 1,
"effects": [
{
"type": "statBoost",
"statPool": [
"intelligence"
]
}
],
"choices": [
{
"text": "Continue",
"passage": "warningShout"
}
]
},
{
"id": "graffitiOnHatch",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera feed shows only a fragment of fresh scrape marks on the metal near the lens.",
"imageWithCamera": "assets/characters/neighbor/cameraNothing.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{
"type": "statChange",
"healthRange": [
-2,
-1
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "graffitiOnHatch",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "stoneThrow",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera catches the tail of a coat as someone darts out of frame.",
"imageWithCamera": "assets/characters/neighbor/cameraGangSurvivor.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{
"type": "statChange",
"healthRange": [
-5,
-2
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "stoneThrow",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "boobyTrap",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows fresh grooves and metal shavings around the hatch.",
"imageWithCamera": "assets/characters/neighbor/cameraNothing.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{
"type": "statChange",
"healthRange": [
-15,
-8
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "boobyTrap",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "coldNight",
"title": "Cold Night",
"image": "assets/characters/neighbor/coldNight.jpg",
"text": "The temperature dropped sharply. Sleep was shallow and stiff with shivers.",
"repeatable": true,
"effects": [
{
"type": "statChange",
"healthRange": [
-3,
-1
]
}
],
"choices": [
{
"text": "Continue",
"passage": "coldNight",
"applyEffects": true
}
]
},
{
"id": "ratsInWalls",
"title": "Rats in the Walls",
"image": "assets/characters/neighbor/ratsInWalls.jpg",
"text": "Scratching swells behind the walls. By morning, a torn sack is all that's left.",
"repeatable": true,
"minItem": {
"cannedFood": 1
},
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qtyRange": [
1,
2
]
}
]
}
],
"choices": [
{
"text": "Continue",
"passage": "ratsInWalls"
}
]
},
{
"id": "rustyPipe",
"title": "Rusty Pipe",
"image": "assets/characters/neighbor/waterLeak.webp",
"text": "A corroded pipe split overnight. The floor is damp and smells like metal.",
"repeatable": true,
"minItem": {
"cannedFood": 1,
"water": 1
},
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "water",
"qtyRange": [
1,
2
]
},
{
"id": "cannedFood",
"qtyRange": [
0,
1
]
}
]
}
],
"choices": [
{
"text": "Continue",
"passage": "rustyPipe"
}
]
},
{
"id": "dustCloud",
"title": "Dust Cloud",
"image": "assets/characters/neighbor/dustCloud.jpg",
"text": "A fine cloud of dust fills the corridor after something shook loose.",
"repeatable": true,
"effects": [
{
"type": "statChange",
"healthRange": [
-8,
-3
]
}
],
"choices": [
{
"text": "Continue",
"passage": "dustCloud",
"applyEffects": true
}
]
},
{
"id": "safeKnock",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "A shy figure leaves the bundle and hurries away the moment your camera whirs.",
"imageWithCamera": "assets/characters/neighbor/safeKnock.jpg",
"repeatable": true,
"minReputation": 1,
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
30,
70
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "safeKnock"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "helpfulNote",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "A figure hesitates at the hatch, then slides a folded slip of paper toward the seam and vanishes.",
"imageWithCamera": "assets/characters/neighbor/helpfulNote.jpg",
"repeatable": true,
"minReputation": 1,
"effects": [
{
"type": "statBoost",
"statPool": [
"intelligence"
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "helpfulNote",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "returnedFavor",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "The camera shows only the bag and a fading set of footsteps in the dust.",
"imageWithCamera": "assets/characters/neighbor/quietGift.jpg",
"repeatable": false,
"minReputation": 1,
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": [
{
"id": "bandage",
"qty": [
1
]
},
{
"id": "cannedFood",
"qty": [
1
]
}
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "returnedFavor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "threateningMark",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "There was no one in front of the bunker hatch.",
"imageWithCamera": "assets/characters/neighbor/cameraNothing.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{
"type": "statChange",
"healthRange": [
-3,
-1
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "threateningMark",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "friendlyTipSupermarket",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "The camera catches a lone figure jogging away from your hatch, hood pulled low.",
"imageWithCamera": "assets/characters/neighbor/friendlyTipSupermarket.jpg",
"repeatable": false,
"minReputation": 1,
"effects": [],
"choices": [
{
"text": "Open the hatch",
"passage": "unlockSupermarket"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderPistol",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you check the camera. A wary woman holds a bundle close to her chest.",
"imageWithCamera": "assets/characters/neighbor/TraderPistol.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderPistol"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderMap",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You switch on the camera. A man in a torn coat unrolls a weathered map and taps it, glancing around nervously.",
"imageWithCamera": "assets/characters/neighbor/TraderMap.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderMap"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderRing",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows a tired woman lifting a small golden ring toward the lens.",
"imageWithCamera": "assets/characters/neighbor/cameraTraderRing.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderRing"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderWatch",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the feed, a scruffy man dangles a golden watch by its chain.",
"imageWithCamera": "assets/characters/neighbor/cameraTraderWatch.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderWatch"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderScrap",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera catches a sly-looking man rummaging in a satchel of wires and metal bits.",
"imageWithCamera": "assets/characters/neighbor/TraderScrap.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderScrap"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderBook",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "An old vagabond clutches a dusty book to his chest, bowing toward the lens as if pleading for a fair trade.",
"imageWithCamera": "assets/characters/neighbor/TraderBook.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderBook"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderFake",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A shabby man unwraps a lumpy bundle toward the camera. He looks like a trader.",
"imageWithCamera": "assets/characters/neighbor/TraderFake.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderFake"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "EastereggCode",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You switch on the camera, but see no one outside. Just the wind and dust swirling.",
"imageWithCamera": "assets/characters/neighbor/EastereggCode.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "EastereggCode"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "BanditWoman",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You switch on the camera. A rough-looking woman in torn clothes stands there, clutching a knife and glaring at the hatch.",
"imageWithCamera": "assets/characters/neighbor/BanditWoman.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "BanditWoman"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "BrokenFlashlight",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You check the camera. A gaunt man stands there, holding a broken flashlight and fidgeting with exposed wires.",
"imageWithCamera": "assets/characters/neighbor/BrokenFlashlight.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "BrokenFlashlight"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "SealedBox",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the feed a nervous woman holds a small, rusted metal box with a combination lock; she traces the numbers with a trembling finger.",
"imageWithCamera": "assets/characters/neighbor/cameraSealedBox.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "SealedBox"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "MapPuzzle",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows an old traveler holding a torn, annotated map and a scrap of paper covered in odd symbols - he looks to you, hopeful.",
"imageWithCamera": "assets/characters/neighbor/MapPuzzle.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "MapPuzzle"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "WaterVisitor",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the camera a lone traveler lifts a single bottle of water toward the lens.",
"imageWithCamera": "assets/characters/neighbor/WaterVisitor.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "WaterVisitor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "FoodVisitor",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Through the camera you see a ragged woman raising a single can of food.",
"imageWithCamera": "assets/characters/neighbor/FoodVisitor.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "FoodVisitor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "ThievesCoupleMF",
"image": "assets/characters/neighbor/banging.jpg",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
}
],
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows a man and a woman standing close together. Their clothes are rough and they keep glancing around nervously.",
"imageWithCamera": "assets/characters/neighbor/cameraThievesCoupleMF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "ThievesCoupleMF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "ThievesDuoFF",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
}
],
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Two women stand side by side.",
"imageWithCamera": "assets/characters/neighbor/cameraThievesDuoFF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "ThievesDuoFF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "BetrayalArgument",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A man and a woman argue loud enough for the camera to pick up clipped words - accusations, anger, and something like regret in her face.",
"imageWithCamera": "assets/characters/neighbor/cameraBetrayalArgument.jpg",
"repeatable": false,
"choices": [
{
"text": "Open It",
"passage": "BetrayalArgument"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "MadDrifter",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A disheveled man peers at the lens, one hand on the grip of a worn pistol.",
"imageWithCamera": "assets/characters/neighbor/cameraMadDrifter.jpg",
"maxReputation": -1,
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "MadDrifter"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "CodeWomanDirectionsA",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A lone woman stands with a travel–worn face, holding a scrap of paper and pointing towards the horizon as if asking for directions.",
"imageWithCamera": "assets/characters/neighbor/CodeWomanDirectionsA.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "CodeWomanDirectionsA"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "CodeWomanDirectionsB",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A different woman, younger and exhausted, presses a cracked compass into view and asks softly if you can point her the right way.",
"imageWithCamera": "assets/characters/neighbor/cameraCodeWomanDirectionsB.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "CodeWomanDirectionsB"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "CoupleRestlessMF",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A tired couple leans on each other for a moment. They look like they’ve walked a long way and need a place to rest.",
"imageWithCamera": "assets/characters/neighbor/cameraCoupleRestlessMF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "CoupleRestlessMF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "YoungLoversMF",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A young pair stands pressed close, whispering urgently - they look frightened, but their bond is obvious.",
"imageWithCamera": "assets/characters/neighbor/cameraYoungLoversMF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "YoungLoversMF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "EstrangedPartnersFF",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Two women stand before the lens – one looks furious, the other ashamed. They are arguing.",
"imageWithCamera": "assets/characters/neighbor/cameraEstrangedPartnersFF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "EstrangedPartnersFF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "SexyBeggarsFF",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A pair of women with good looks were standing in front of the hatch, where they engaged in some light-hearted teasing directed at the camera.",
"imageWithCamera": "assets/characters/neighbor/cameraSexyBeggarsFF.webp",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "SexyBeggarsFF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
}
]<<switch $companionscount>>
<<case 0>>
You sit alone in silence. No one to argue with. Just you and your thoughts.
<<case 1>>
<<set _npc = $companions[0]>>
<<speech _npc _npc>>
I'm bored out of my mind... Can we *do* something?
<</speech>>
<<link "Play cards with them (-1 hour, +rel)" >>
<<set $time -= 1>>
<<set $relationship[_npc] += 5>>
<<goto "Bunker">>
<</link>>
<<link "Ignore them">>
<<set $relationship[_npc] -= 5>>
<<goto "Bunker">>
<</link>>
<<default>>
<<set _npc1 = $companions.random()>>
<<set _npc2 = $companions.random()>>
<<while _npc2 == _npc1>>
<<set _npc2 = $companions.random()>>
<</while>>
<<speech _npc1 _npc1>>
I'm sick of sharing my food with her. She's not doing anything!
<</speech>>
<<speech _npc2 _npc2>>
At least I'm not a control freak. You don’t even let us rest!
<</speech>>
<<link "Support $_npc1">>
<<set $relationship[_npc1] += 5>>
<<set $relationship[_npc2] -= 5>>
<<goto "Bunker">>
<</link>>
<<link "Support $_npc2">>
<<set $relationship[_npc2] += 5>>
<<set $relationship[_npc1] -= 5>>
<<goto "Bunker">>
<</link>>
<<link "Stay neutral">>
<<set $ego += 1>>
<<goto "Bunker">>
<</link>>
<</switch>><<set _roll = random(1)>><<set _forceHelp = (!$eventItemsGive || $eventItemsGive.length === 0)>><<if not _forceHelp>> <<set _item = $eventItemsGive[0]>> <center><img src="assets/characters/neighbor/beggingitem.jpg"> </center>
<<neighborsad>>Please, we really need your help. We’re not sure how we’ll manage without it. <</neighborsad>>
<center><b>Requested item:</b>
<<= setup.renderItemList($eventItemsGive)>></center>
<<nobr>><<button "Give the item">><<goto "needyNeighborGive">><</button>>
<<button "Refuse">><<goto "needyNeighborRefuse">><</button>><</nobr>><<else>> <center><img src="assets/characters/neighbor/begging.jpg"> </center>
<<neighborsad>>Please, we really need your help. We’re not sure how we’ll manage without it. <</neighborsad>>
<<nobr>><<button "Help them">><<run setup.rollRandomStatsReward()>><<goto "needyNeighborHelp">><</button>>
<<button "Refuse">><<goto "needyNeighborRefuse">><</button>><</nobr>><</if>><<run setup.AddItemsList("add")>> <center><img src="assets/characters/neighbor/gift.jpg"> </center><<addmins 60>>
<<neighborhappy>>I brought you some extra supplies that I have too many of. I hope that even in these difficult times we’ll help one another. So many people have turned into monsters in the face of this kind of life. Oh! I think someone’s coming, I’m heading back home! Take care!<</neighborhappy>>
<b>You received:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><<set $hornySteal = Math.random() < 0.5>><center><<set _roll to random(2)>><<if _roll is 0>><img src="assets/characters/neighbor/hornyNeighbor.webp"><<elseif _roll is 1>><img src="assets/characters/neighbor/hornyNeighbor1.webp"><<elseif _roll is 2>><img src="assets/characters/neighbor/hornyNeighbor2.webp"><</if>></center>
<<womanhorny>>Hey... It’s cold out here, and I could use some warmth. Want some company tonight?<</womanhorny>>
<<nobr>><<button "Let her in and fuck her">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "maybeSteal"
})>><<goto "RandomNSFW">><</button>>
<<button "Close the door">><<goto "Bunker">><</button>><</nobr>><<addmins 60>><<set $player.energy -= 20>> <center><img src="assets/characters/neighbor/bunkerBandits.webp"></center>
<<bandit>>You will give us everything you have.<</bandit>>
<<button "Fight">> <<run setup.startCombat({
enemies: setup.generateTieredEnemies("banditsMedium"),
allies: [],
onWin: "banditsDefeated",
onLose: "GameOver"
})>> <<goto "Combat">><</button>><<addmins 120>><<set $player.energy -= 20>> <<if $stashRoll === 0>><<run setup.applyEventEffects()>><center><img src="assets/characters/neighbor/ratAttack.jpg"></center>
When you reached in to pull out one of the bags, you suddenly felt a sharp pain, followed by the shadow of a rat scurrying across the floor of the bunker.
You found nothing, but noticed that your hand was bleeding from the bite.
<<if $statChangeLog && $statChangeLog.length>><div style="margin-top: 1em; font-weight: bold; color: #c00;"><<for _i = 0; _i < $statChangeLog.length; _i++>><<set _e = $statChangeLog[_i]>><center><<print _e.stat>>: <<print _e.amount>></center><</for>></div><</if>>
<<button "Next">><<set $statChangeLog = []>><<goto "Bunker">><</button>><<else>> <<run setup.AddItemsList("add")>><center><img src="assets/characters/neighbor/stashGoods.jpg"></center>
When you reached in to pull out one of the bags <b>you found:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><</if>><<addmins 60>><<set $player.energy -= 20>> <<if $reputation lt -20>><center><img src="assets/characters/neighbor/soldier.webp"></center>
<<soldier>>You're the bastard everyone warned us about!<</soldier>>
<<button "Fight them">> <<run setup.startCombat({
enemies: setup.generateTieredEnemies("soldiersMedium"),
allies: [],
onWin: "soldierCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>><<elseif $reputation gt 20>><<run setup.AddItemsList("add")>><center><img src="assets/characters/neighbor/soldier.webp"></center>
<<soldier>>It's you! We've heard about you, you help the local residents a lot. In such difficult times, it's rare to meet someone like you.<</soldier>>
<b>You received:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><<elseif $reputation gt -21>><center><img src="assets/characters/neighbor/soldier.webp"></center>
<<soldier>>Hello! We are the 3rd Airborne Regiment... Or rather, what's left of it. We are collecting items from the neighbourhood so that we can continue to fight the bandits and protect you. Give us that.<</soldier>>
<center><b>Requested item:</b>
<<= setup.renderItemList($eventItemsGive)>></center>
<<nobr>><<if $eventItemsGive and $eventItemsGive.length > 0>><<button "Give the item">><<goto "bunkerSoldiersGive">><</button>><</if>>
<<button "Refuse">><<goto "bunkerSoldiersRefuse">><</button>><</nobr>><</if>><<run setup.generateTraderItems()>><<run setup.rebuildInventoryFromVars()>><<set $traderToday = false>><center><img src="assets/characters/neighbor/trader.jpg"></center>
<<trader>>Would you like to trade? I have something that might interest you.<</trader>>
<<nobr>><<button "Trade">><<goto "trading">><</button>>
<<button "Threaten him - give up everything">><<set $reputation -= 5>><<goto "traderFight">><</button>>
<<button "Not today">><<goto "Bunker">><</button>><</nobr>><<addmins 180>><<set $player.energy -= 30>><center><video width="480" height="320" controls autoplay playsinline loop>
<source src="assets/characters/neighbor/readManual.mp4" type="video/mp4">
</video>
</center>
<p><b>You spent a few hours reading what you found. Thanks to that, you learned a few tricks.</b></p>
<<if $statRewardMessage>><p><b><<print $statRewardMessage>></b></p><</if>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 180>><<set $player.energy -= 30>><<set $reputation += 2>> <center> <img src="assets/characters/neighbor/avatarhappy.jpg"> </center>
<<neighborhappy>>Thank you from the bottom of our hearts. It really means a lot to us.<</neighborhappy>>
<<if $statRewardMessage>><p><b><<print $statRewardMessage>></b></p><</if>>
<<button "Next">><<goto "Bunker">><</button>><<run setup.applyEventItems("give", $eventItemsGive)>><<set $reputation += 2>> <<addmins 60>><<set $player.energy -= 10>> <center><img src="assets/characters/neighbor/avatarhappy.jpg"> </center>
<<neighborhappy>>Thank you from the bottom of our hearts. It really means a lot to us.<</neighborhappy>>
<center><b>You lost:</b></center>
<<= setup.renderItemList($eventItemsGive)>>
<<button "Next">><<goto "Bunker">><</button>><<set $reputation -= 2>> <center> <img src="assets/characters/neighbor/avatarsad.jpg"> </center>
<<neighborsad>>What did we expect... I hope we can survive without your help.<</neighborsad>>
<<button "Next">><<goto "Bunker">><</button>><<set $player.endurance += 1>><<addmins 120>><<set $player.energy -= 20>><<set _roll to random(2)>><center><<if _roll is 0>><img src="assets/characters/neighbor/hornyNeighborFuck.webp"><<elseif _roll is 1>><img src="assets/characters/neighbor/hornyNeighborFuck1.webp"><<elseif _roll is 2>><img src="assets/characters/neighbor/hornyNeighborFuck2.webp"><</if>></center>
<p>You let her in. She smiles, pulls you closer, and things escalate quickly in the dim light of your bunker...</p>
<<if $hornySteal and $eventItemsGive and $eventItemsGive.length > 0>><<run setup.applyEventItems("give", $eventItemsGive)>>
<p><b>Later, something feels off... You realize something's missing.</b></p>
<center><b>You lost:</b></center>
<<= setup.renderItemList($eventItemsGive)>>
<<else>><p><b>After a passionate night, she leaves quietly. Thankfully, nothing seems to be missing.</b></p><</if>>
<<button "Next">><<goto "Bunker">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The bandits are wounded and helpless. What do you want to do with them?</p>
<<nobr>><<button "Spare them">><<goto "SpareAfterFight">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate their freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $respect += 2>><<set _roll to random(1)>><<if _roll is 0>><center><img src="assets/characters/neighbor/spare.webp"></center><<elseif _roll is 1>><center><img src="assets/characters/neighbor/spare1.webp"></center><</if>>
You spared that person, and they quickly got up from the ground and started running away.
<<button "Next">><<goto "Bunker">><</button>><<set $reputation -= 10>> <<set $player.hunger = 0>><center><img src="assets/characters/neighbor/cannibal.webp"></center>
<p>Survival has changed you. You're no longer bound by taboo. You butcher their corpses and eat the meat.</p>
<<button "Next">><<goto "Bunker">><</button>><<set _roll to random(1)>><<if _roll is 0>><center><img src="assets/characters/neighbor/kill.webp"></center><<elseif _roll is 1>><center><img src="assets/characters/neighbor/kill1.webp"></center><</if>>
You killed everyone who stood in your way.
<<nobr>><<button "Leave">><<goto "Bunker">><</button>>
<<button "Eat them">><<goto "CannibalAfterFight">><</button>><</nobr>><<run setup.applyEventItems("give", $eventItemsGive)>><<set $reputation += 2>> <center><img src="assets/characters/neighbor/soldier.webp"></center>
<<soldier>>Thank you from the bottom of our hearts. It really means a lot to us.<</soldier>>
<<button "Next">><<goto "Bunker">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The soldiers are wounded and helpless. What do you want to do with them?</p>
<<nobr>><<button "Spare them">><<goto "SpareAfterFight">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate their freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/soldier.webp"></center>
<<soldier>>No? Then we'll take it ourselves.</soldier>>
<<button "Fight them">> <<run setup.startCombat({
enemies: setup.generateTieredEnemies("soldiersMedium"),
allies: [],
onWin: "soldierCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><<addmins 180>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/checkFood.jpg"></center>
<p><b>It took a lot of energy and time, but it turned out that you managed to save your supplies.</b></p>
<<button "Next">><<goto "Bunker">><</button>><<run setup.applyEventItems("give", $eventItemsGive, true)>><img src="assets/characters/neighbor/foodlost.jpg">
You lost some of your canned food due to spoilage.
<<if $statChangeLog and $statChangeLog.length > 0>><b>You lost:</b>
<<= setup.renderItemLog($statChangeLog, { style: "grid", size: 80 })>><</if>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 180>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/checkFood.jpg"></center>
<p><b>It took a lot of energy and time, but you managed to save your supplies and kill the rats by setting traps.</b></p>
<<button "Next">><<goto "Bunker">><</button>><<run setup.applyEventItems("give", $eventItemsGive, true)>><img src="assets/characters/neighbor/foodBurn.jpg">
You decided not to beat around the bush, acting quickly and effectively by setting fire to the room. Although you lost some supplies, the rats shouldn't be a problem for a while.
<<if $statChangeLog and $statChangeLog.length > 0>><b>You lost:</b>
<<= setup.renderItemLog($statChangeLog, { style: "grid", size: 80 })>><</if>>
<<button "Next">><<goto "Bunker">><</button>> <center><img src="assets/characters/neighbor/begging.jpg"></center>
<<neighborsad>>Please, we really need your help. We’re not sure how we’ll manage without it. <</neighborsad>>
<<nobr>><<button "Help them">><<run setup.rollRandomStatsReward()>><<goto "needyNeighborHelp">><</button>>
<<button "Refuse">><<goto "needyNeighborRefuse">><</button>><</nobr>><<addmins 120>><<set $scrapMetal -= 1>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/knifeFix.jpg"></center>
<b><p>You find a quiet corner of the bunker, sit down, and examine the dull blade.
With a piece of scrap metal and steady hands, you begin sharpening the edge - slowly, carefully, as sparks fly in the dim light. The sound of metal scraping against metal is almost calming. After some time your knife regains its sharpness.
It's not perfect, but it's ready to serve you again.</b></p>
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "scrapMetal", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<run setup.AddItemsList("add")>><<addmins 180>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/stashGoods.jpg"></center>
<b><p>You decided to take a risk, put on a gas mask and left the bunker, quickly closing the hatch behind you. After several hours of searching the area, you found a few useful items and returned safely to the bunker.</b></p>
<b>You received:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><<set $knife -= 1>><center><img src="assets/characters/neighbor/brokenKnife.webp"></center>
<b><p>You glance at the knife and sigh.
The blade is dull. The edge chipped. But you don't have the time or patience to deal with it now.</b></p>
<<you>>It'll manage.<</you>>
<b><p>You mutter, sliding it back into your belt. Later that day, when you need it most, the knife bends uselessly against hardened material. You feel the weight of regret as the blade snaps in half - leaving you empty-handed.</b></p>
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "knife", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<addmins 240>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/fixedMap.jpg"></center>
You took a moment to dry the map and patched the soaked corner using available materials. It’s far from perfect, but still usable.
<<button "Next">><<goto "Bunker">><</button>><<set $map -= 1>><center><img src="assets/characters/neighbor/brokenMap.jpg"></center>
You ignored the damage, hoping you'd remember the terrain. But the ink kept running and the map started falling apart in your hands.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "map", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $suitcase -= 1>><center><img src="assets/characters/neighbor/suitcaseBroken.jpg"></center>
The thought of dragging a useless suitcase through ruins felt absurd. You left it behind and moved on.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "suitcase", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<addmins 240>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/checkFood.jpg"></center>
You stopped and used what you had to reinforce the broken handle. It’s not elegant, but at least it can be carried again.
<<button "Next">><<goto "Bunker">><</button>><<addmins 240>><<set $player.energy -= 30>><center><img src="assets/ui/bag.jpg"></center>
You sat down and carefully stitched the torn fabric. It took a while, but the backpack is still serviceable.
<<button "Next">><<goto "Bunker">><</button>><<set $bag -= 1>><center><img src="assets/characters/neighbor/bagBroken.jpg"></center>
You didn’t have time to deal with it. With a heavy heart, you tossed the ripped backpack aside and kept going.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "bag", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<addmins 240>><<set $scrapMetal -= 1>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/pistolFix.jpg"></center>
You sat down, carefully disassembled the pistol, and used some metal scraps to restore its function. It should hold for now.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "scrapMetal", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $wood -= 1>><<addmins 180>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/batFix.jpg"></center>
You found a solid piece of wood and reinforced the cracked section. It’s not perfect, but it’ll swing again.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "wood", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $pistol -= 1>><center><img src="assets/characters/neighbor/pistolBroken.jpg"></center>
A jammed gun is more dangerous than no gun at all. You left it behind without looking back.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "pistol", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $bat -= 1>><center><img src="assets/characters/neighbor/batBroken.jpg"></center>
There was no point in dragging around a broken bat. You dropped it and moved on.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "bat", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $scrapMetal -= 1>><<addmins 180>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/waterFix.webp"></center>
You used whatever you had to tighten the seal. It might not last forever, but you saved the water.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "scrapMetal", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $water -= 1>><center><img src="assets/characters/neighbor/waterBroken.jpg"></center>
You tried to drink what you could, but most of it spilled. A hard loss in times like this.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "water", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<addmins 120>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/bandageFix.jpg"></center>
You gently dried the bandages over your heater. They’re not sterile, but better than nothing.
<<button "Next">><<goto "Bunker">><</button>><<set $bandage -= 1>><center><img src="assets/characters/neighbor/bandageBroken.jpg"></center>
You didn’t want to risk infection. Into the trash they went.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "bandage", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><center><img src="assets/characters/neighbor/firstAidFix.jpg"></center>
<<set _roll to random(1)>><<if _roll is 0>><<set $firstAid -= 1>You decided to keep it. When you’re desperate, even expired supplies can save a life, but it was no longer useful.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "firstAid", qty: [1] }])>></center><<else>>You decided to keep it. When you’re desperate, even expired supplies can save a life.<</if>>
<<button "Next">><<goto "Bunker">><</button>><<set $firstAid -= 1>><<set $scrapMetal += 2>><<addmins 180>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/firstAidFix.jpg"></center>
You disassembled the kit, salvaging a few parts for crafting.
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "scrapMetal", qty: [2] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $scrapMetal -= 1>><<addmins 180>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/flashlightFix.jpg"></center>
You opened the casing, adjusted the wiring, and it’s working again - for now.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "scrapMetal", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $flashlight -= 1>><center><img src="assets/characters/neighbor/flashlightBroken.jpg"></center>
You threw it into the corner. No point in carrying dead weight.
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "flashlight", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/whiteWomanRequest.webp"></center>
She looks up at you with dry, cracked lips and desperate eyes.
<<womanwhitebeg>>Please! I just need some water or food. I haven't eaten or drunk anything for two days.<</womanwhitebeg>>
<<nobr>><<if $water > 0>>
<<button "Give him water">>
<<set $water -= 1>>
<<goto "strangerGiveWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Give him food">>
<<set $cannedFood -= 1>>
<<goto "strangerGiveFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Make a deal">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "begging"
})>><<goto "RandomNSFW">><</button>>
<<button "Threaten her - give up everything">><<goto "strangerWomanRequestFight">><</button>>
<<button "Tell her to fuck off">><<set $reputation -= 2>><<goto "Bunker">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/whiteManRequest.webp"></center>
He looks up at you with dry, cracked lips and desperate eyes.
<<manwhitebeg>>Give me something to eat or a little bit of water! I'll do everything! Be a human being! Please!<</manwhitebeg>>
<<nobr>><<if $water > 0>>
<<button "Give him water">>
<<set $water -= 1>>
<<goto "strangerGiveWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Give him food">>
<<set $cannedFood -= 1>>
<<goto "strangerGiveFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Make a deal">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "begging"
})>><<goto "RandomNSFW">><</button>>
<<button "Threaten him - give up everything">><<goto "strangerManRequestFight">><</button>>
<<button "Tell him to fuck off">><<set $reputation -= 2>><<goto "Bunker">>
<</button>><</nobr>><center><img src="assets/characters/neighbor/whiteWomanAttack.webp"></center>
<<womanwhitebeg>>Oh...<</womanwhitebeg>>
<<button "Fight her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Poor woman', maxHp: 10, weapon: 'fist' },
],
allies: [],
onWin: "strangerWomanCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><<set $reputation -= 5>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/whiteManRequest.webp"></center>
<<manwhitebeg>>Are you serious?<</manwhitebeg>>
<<button "Fight him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Poor man', maxHp: 20, weapon: 'fist' },
],
allies: [],
onWin: "strangerManCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><<set $reputation -= 5>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/travelerWithCaptive.webp"></center>
<<traveler>>Got this stray bitch sniffing around my camp for food. I'm moving on - figured maybe you'd wanna take her off my hands. Not for free, of course.<</traveler>>
<<nobr>> <<button "Trade something for her freedom">><<goto "captiveTrade">><</button>>
<<button "Attack him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'banditMale', name: 'Big armored guy', maxHp: 100, weapon: 'pistol' },
],
allies: [],
onWin: "travelerWithCaptiveCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Close the hatch">><<goto "Bunker">><</button>><</nobr>><<run setup.resolveNSFWMedia()>>\
\
<<set _npcLabel = ($nsfwGender === 'male'
? 'His arousal'
: ($nsfwGender === 'female' ? 'Her arousal' : 'Their arousal'))>>\
\
<<set _sex = $fuckPussyAction>>\
<<set _anal = $fuckAssAction>>\
<<set _analyou = $fuckYourAssAction>> \
<<set _suck = $suckCockAction>> \
\
\
<<set $fuckPussyAction = false>>\
<<set $fuckAssAction = false>>\
<<set $fuckYourAssAction = false>>\
<<set $suckCockAction = false>>\
\
<div id="nsfw-main">\
<<if !$nsfwSceneInitialized>>\
<<run setup.enterNSFWMusic()>>\
<<set $nsfwSceneInitialized = true>>\
<<set $nsfwSceneStarted = false>>\
<<set $currentMedia = setup.getRandomNSFWMedia($currentScene, "intro")>>\
<<set _genderCap = $nsfwGender.charAt(0).toUpperCase() + $nsfwGender.slice(1)>>\
<<set _introArray = setup['text' + _genderCap]?.introText || []>>\
<<set $lastActionText = _introArray.length ? _introArray.random() : "⚠️ Missing introText">>\
<</if>>\
\
<<if $ArousalNPC >= 100>>
<<run (function () {
const v = State.variables;
const g = v.nsfwGender;
if (g === 'male') {
if (_suck && setup.hasNSFW('finishhimoral')) {
setup.pickNSFW('finishhimoral'); v.ArousalNPC = 45; return;
}
if (_analyou && setup.hasNSFW('finishhimanal')) {
setup.pickNSFW('finishhimanal'); v.ArousalNPC = 45; return;
}
if (_anal && setup.hasNSFW('finishhimsex')) {
setup.pickNSFW('finishhimsex'); v.ArousalNPC = 45; return;
}
if (setup.hasNSFW('finishhim')) {
setup.pickNSFW('finishhim'); v.ArousalNPC = 45; return;
}
v.ArousalNPC = 45; return;
}
if (g === 'MMF') {
if (_suck && setup.hasNSFW('finishhimoral')) {
setup.pickNSFW('finishhimoral'); v.ArousalNPC = 45; return;
}
if (_analyou && setup.hasNSFW('finishhimanal')) {
setup.pickNSFW('finishhimanal'); v.ArousalNPC = 45; return;
}
if ((_sex || _anal) && setup.hasNSFW('finishhersex')) {
setup.pickNSFW('finishhersex'); v.ArousalNPC = 45; return;
}
if (setup.hasNSFW('finishher')) {
setup.pickNSFW('finishher'); v.ArousalNPC = 45; return;
}
v.ArousalNPC = 45; return;
}
if (g === 'female' || g === 'FFM') {
if ((_sex || _anal) && setup.hasNSFW('finishhersex')) {
setup.pickNSFW('finishhersex'); v.ArousalNPC = 45; return;
}
if (setup.hasNSFW('finishher')) {
setup.pickNSFW('finishher'); v.ArousalNPC = 45; return;
}
v.ArousalNPC = 45; return;
}
v.ArousalNPC = 45;
})()>>
<</if>>
\
<<set _mediaData = $nsfwMedia[$currentScene]>>\
<<if !$currentMedia and _mediaData and _mediaData.intro and _mediaData.intro.length > 0>>\
<<set $currentMedia = setup.getRandomNSFWMedia($currentScene, "intro")>>
<</if>>\
\
\
\
<div class="nsfw-frame">\
\
<div class="arousal-col">
<<print '<div class="arousal-meter npc ' + $nsfwGender + '" style="--level:' + $ArousalNPC + '%;" data-level="' + $ArousalNPC + '"></div>'>>\
<div class="arousal-label"><<= _npcLabel>></div>\
</div>\
\
<div class="nsfw-media">\
<center><<if $currentMedia and (!$nsfwSceneEnded or $nsfwEndCard)>>
<<if $currentMedia.endsWith(".mp4")>>\
<<print '<video src="' + $currentMedia + '" autoplay muted loop style="max-width:100%; max-height:400px; border-radius:8px;"></video>'>>\
<<else>>\
<<print '<img src="' + $currentMedia + '" style="max-width:100%; max-height:400px; border-radius:8px;" />'>>\
<</if>>\
<</if>></center>\
</div>\
\
<div class="arousal-col">
<<print '<div class="arousal-meter player" style="--level:' + $ArousalPlayer + '%;" data-level="' + $ArousalPlayer + '"></div>'>>\
<div class="arousal-label">Your arousal</div>\
</div>\
</div>\
\
<<if $lastActionText>><p class="nsfw-text"><<=$lastActionText>></p><</if>>
\
<<if !$nsfwSceneEnded>>\
\
<<if $player.energy >= 2 and ($ArousalPlayer lt 100) and (!$playerFinished)>>\
<<RandomNSFWButtons>>\
<</if>>\
\
<<if ($ArousalPlayer gte 100) and (!$playerFinished)>>\
<div class="finish-options" style="display:flex; flex-direction:column; align-items:center; gap:12px; margin-top:16px;">\
<<if _sex and setup.hasNSFW('cuminpussy')>>\
<<button "Finish Inside">>\
<<run setup.pickNSFW('cuminpussy')>>\
<<set $ArousalPlayer = 0>><<set $playerFinished = true>>\
<<goto "RandomNSFW">>\
<</button>>\
<</if>>\
\
<<if _anal and setup.hasNSFW('cuminass')>>\
<<button "Finish in Ass">>\
<<run setup.pickNSFW('cuminass')>>\
<<set $ArousalPlayer = 0>><<set $playerFinished = true>>\
<<goto "RandomNSFW">>\
<</button>>\
<</if>>\
\
<<if setup.hasNSFW('cumonface')>>\
<<button "Finish on Face">>\
<<run setup.pickNSFW('cumonface')>>\
<<set $ArousalPlayer = 0>><<set $playerFinished = true>>\
<<goto "RandomNSFW">>\
<</button>>\
<</if>>\
\
<<if setup.hasNSFW('cummouth')>>\
<<button "Finish in Mouth">>\
<<run setup.pickNSFW('cummouth')>>\
<<set $ArousalPlayer = 0>><<set $playerFinished = true>>\
<<goto "RandomNSFW">>\
<</button>>\
<</if>>\
</div>\
<</if>>\
\
<div style="text-align:center; margin-top:1em;">\
<<button "End scene">>\
<<set $playerFinished = true>>\
<<run setup.exitNSFWMusic()>>\
<<run setup.endNSFWScene()>>\
<<goto "RandomNSFW">>\
<</button>>\
</div>\
\
<<else>>\
\
<p class="nsfw-text" style="text-align:center;">The scene is over. What will you do next?</p>
<<set _scene = $nsfwSceneData>>\
<<set _option = _scene.option || null>>\
<<set _choices = _option ? setup.getNSFWChoices(_option) : []>>\
\
<<nobr>><<for _i = 0; _i < _choices.length; _i++>>\
<<capture _choices[_i]>>\
<center><<button _choices[_i].text>><<goto _choices[_i].passage>><</button>></center>
<</capture>>\
<</for>><</nobr>>\
\
<</if>>\<<widget "RandomNSFWButtons">>\
<<set _cfg = setup.randomActionsConfig>>\
<<set _mediaData = $nsfwMedia[$currentScene] || {}>>\
<<set _gender = $nsfwGender || "female">>\
<<set _textData =
_gender === "male" ? setup.textMale :
_gender === "FFM" ? setup.textFFM :
_gender === "MMF" ? setup.textMMF :
setup.textFemale
>>\
\
<div class="nsfw-buttons" style="display:flex; flex-wrap:wrap; justify-content:center; gap:12px;">\
<<for _key range Object.keys(_cfg)>>\
<<set _act = _cfg[_key]>>\
\
<<if
(!_act.allowedGenders || _act.allowedGenders.includes(_gender))
and $ArousalNPC >= (_act.requiredArousal || 0)
and $player.energy >= _act.energyCost
>>
<<capture _key _act>>
<<print `
<img
src="assets/ui/icons/${_key}.png"
class="nsfw-action-icon"
title="${_act.label}"
onclick="
const vars = SugarCube.State.variables;
const setup = window.setup;
vars.lastActionKey = '${_key}';
vars.currentMedia = setup.getRandomNSFWMedia(vars.currentScene, '${_key}');
vars.lastActionText = (
setup?.[
(vars.nsfwGender === 'male')
? 'textMale'
: (vars.nsfwGender === 'FFM')
? 'textFFM'
: (vars.nsfwGender === 'MMF')
? 'textMMF'
: 'textFemale'
]?.['${_key}']?.random?.()
) || '⚠️ Missing text for ${_key}';
vars.ArousalNPC += ${_act.gainArousal || 0};
vars.player.energy -= ${_act.energyCost || 0};
vars.ArousalPlayer = (vars.ArousalPlayer || 0) + (${_act.playerArousalGain || 0});
vars.fuckPussyAction = ('${_key}' === 'fuckPussy');
vars.fuckAssAction = ('${_key}' === 'fuckAss');
vars.fuckYourAssAction = ('${_key}' === 'fuckYourAss');
vars.suckCockAction = ('${_key}' === 'suckCock');
setup.advanceTime(${_act.timeCost || 1});
SugarCube.Engine.play('RandomNSFW');">`>><</capture>><</if>><</for>></div><</widget>>[
{
"id": "begging",
"choices": [
{ "text": "Give water", "condition": "$water > 0", "passage": "strangerGiveWater" },
{ "text": "Give food", "condition": "$cannedFood > 0", "passage": "strangerGiveFood" },
{ "text": "Kick out", "passage": "strangerKickedOut" }
]
},
{
"id": "fight",
"choices": [
{ "text": "Spare", "passage": "SpareAfterFight" },
{ "text": "Kill", "passage": "KillAfterFight" }
]
},
{
"id": "afterDeal",
"choices": [
{ "text": "Next", "passage": "Bunker" }
]
},
{
"id": "maybeSteal",
"choices": [
{ "text": "Next", "passage": "hornyNeighboryes" }
]
},
{
"id": "maybeStealMMF",
"choices": [
{ "text": "Next", "passage": "ThievesCoupleMFyes" }
]
},
{
"id": "maybeStealFFM",
"choices": [
{ "text": "Next", "passage": "ThievesDuoFFyes" }
]
},
{
"id": "medic",
"choices": [
{ "text": "Help him", "condition": "$firstAid > 0 || $bandage > 0", "passage": "gangSurvivorHelped1" },
{ "text": "Kill him", "passage": "KillAfterFight" },
{ "text": "Kick him out", "passage": "strangerKickedOut" }
]
}
]<<set $water -= 1>><<set $reputation += 2>><center><img src="assets/characters/neighbor/giveWater.webp"></center>
You hand a bottle of water. They grabs it and drinks like it’s the last one on Earth.
<<button "Next">><<goto "Bunker">><</button>><<set $cannedFood -= 1>><<set $reputation += 2>><center><img src="assets/characters/neighbor/giveFood.webp"></center>
You hand a food can. They opens it with shaking fingers and devours it in seconds.
<<button "Next">><<goto "Bunker">><</button>><<set $reputation -= 5>><center><img src="assets/characters/neighbor/kickedOut.webp"></center>
You kicked them out of your bunker.
<<button "Next">><<goto "Bunker">><</button>><center><img src="assets/characters/neighbor/travelerWithCaptiveDeal.jpg"></center>
<<traveler>>Let her go?! She's a thief! She should be in prison, but times are what they are... I don't really need her. If you give me something valuable, I'll let her go.<</traveler>>
<<nobr>><<if $pistol > 0>>
<<button "Offer pistol">>
<<set $pistol -= 1>>
<<goto "captiveTradeDeal">>
<</button>>
<<else>>
<button disabled>Locked: you need pistol</button>
<</if>>
<<if $goldRing > 0>>
<<button "Offer gold ring">>
<<set $goldRing -= 1>>
<<goto "captiveTradeDeal">>
<</button>>
<<else>>
<button disabled>Locked: you need gold ring</button>
<</if>>
<<if $goldWatch > 0>>
<<button "Offer gold watch">>
<<set $goldWatch -= 1>>
<<goto "captiveTradeDeal">>
<</button>>
<<else>>
<button disabled>Locked: you need gold watch</button>
<</if>>
<<button "Attack him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'banditMale', name: 'Big armored guy', maxHp: 100, weapon: 'pistol' },
],
allies: [],
onWin: "travelerWithCaptiveCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Close the hatch">><<goto "Bunker">><</button>><</nobr>><<traveler>>Mhm... Good stuff. She's your problem from now. But if she slits your throat, don't be surprised. It was nice doing business with you. Goodbye.<</traveler>>
<center><img src="assets/characters/neighbor/travelerWithCaptiveFree.webp"></center>
<<womanhorny>>Am I... Am I really free?<</womanhorny>>
<<nobr>><<button "I want something in return">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "maybeSteal"
})>><<goto "RandomNSFW">><</button>>
<<button "Attack her">><<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Poor woman', maxHp: 15, weapon: 'knife' },
],
allies: [],
onWin: "travelerWithCaptiveWomanWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "You are free, go">><<set $reputation += 5>><<goto "Bunker">>
<</button>><</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>Traveler is wounded and helpless. What do you want to do with him and his prisoner?</p>
<<nobr>><<button "Spare him and let her go">><<set $reputation += 5>><<goto "Bunker">><</button>>
<<button "Kill him">><<goto "travelerWithCaptiveCombatWinKillAfterFight">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><<set $reputation -= 5>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/travelerWithCaptiveFree.webp"></center>
<<womanhorny>>Am I... Am I really free?<</womanhorny>>
<<nobr>><<button "You are free, go">><<set $respect += 5>><<goto "Bunker">>
<</button>>
<<button "I want something in return">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "maybeSteal"
})>><<goto "RandomNSFW">><</button>>
<<button "Attack her">><<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Poor woman', maxHp: 15, weapon: 'knife' },
],
allies: [],
onWin: "travelerWithCaptiveWomanWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Eat him">><<goto "travelerWithCaptiveCombatWinCannibalAfterFight">><</button>><</nobr>><<set $reputation -= 10>> <<set $player.hunger = 0>><center><img src="assets/characters/neighbor/cannibal.webp"></center>
<p>When you started cutting up the man's body and slowly eating it, the woman, in shock, began to run away. Now everyone in the neighbourhood will know what you are doing.</p>
<<button "Next">><<goto "Bunker">><</button>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/blackWomanRequest.webp"></center>
She looks up at you with dry, cracked lips and desperate eyes.
<<womanblackbeg>>Please... Just some water or food. I haven't had anything in two days.<</womanblackbeg>>
<<nobr>><<if $water > 0>>
<<button "Give him water">>
<<set $water -= 1>>
<<goto "strangerGiveWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Give him food">>
<<set $cannedFood -= 1>>
<<goto "strangerGiveFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Make a deal">><<run setup.startNSFW({
text: "female",
scenes: "female_black",
option: "begging"
})>><<goto "RandomNSFW">><</button>>
<<button "Threaten her - give up everything">><<goto "strangerWomanRequestFightBlack">><</button>>
<<button "Tell her to fuck off">><<set $reputation -= 2>><<goto "Bunker">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/asianWomanRequest.webp"></center>
She looks up at you with dry, cracked lips and desperate eyes.
<<womanasianbeg>>Please, I'm desperate. I just want some water or food! I haven't had anything in my mouth for days!<</womanasianbeg>>
<<nobr>><<if $water > 0>>
<<button "Give him water">>
<<set $water -= 1>>
<<goto "strangerGiveWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Give him food">>
<<set $cannedFood -= 1>>
<<goto "strangerGiveFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Make a deal">><<run setup.startNSFW({
text: "female",
scenes: "female_asian",
option: "begging"
})>><<goto "RandomNSFW">><</button>>
<<button "Threaten her - give up everything">><<goto "strangerWomanRequestFightAsian">><</button>>
<<button "Tell her to fuck off">><<set $reputation -= 2>><<goto "Bunker">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/blackManRequest.webp"></center>
He looks up at you with dry, cracked lips and desperate eyes.
<<manblackbeg>>Please don't be afraid! I know everyone is having a hard time right now, but I'll do anything for water or food! Please!<</manblackbeg>>
<<nobr>><<if $water > 0>>
<<button "Give him water">>
<<set $water -= 1>>
<<goto "strangerGiveWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Give him food">>
<<set $cannedFood -= 1>>
<<goto "strangerGiveFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Make a deal">><<run setup.startNSFW({
text: "male",
scenes: "male_black",
option: "begging"
})>><<goto "RandomNSFW">><</button>>
<<button "Threaten him - give up everything">><<goto "strangerManRequestFightBlack">><</button>>
<<button "Tell him to fuck off">><<set $reputation -= 2>><<goto "Bunker">>
<</button>><</nobr>><center><img src="assets/characters/neighbor/blackManAttack.webp"></center>
<<manblackbeg>>It's a shame it has to end like this...<</manblackbeg>>
<<button "Fight him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Poor man', maxHp: 20, weapon: 'fist' },
],
allies: [],
onWin: "strangerManCombatWinBlack",
onLose: "GameOver"
})>><<goto "Combat">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><<set $reputation -= 5>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_black",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/blackWomanAttack.webp"></center>
<<womanblackbeg>>Mhm...<</womanblackbeg>>
<<button "Fight her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Poor woman', maxHp: 10, weapon: 'fist' },
],
allies: [],
onWin: "strangerWomanCombatWinBlack",
onLose: "GameOver"
})>><<goto "Combat">><</button>><center><img src="assets/characters/neighbor/asianWomanAttack.webp"></center>
<<womanasianbeg>>Wh... What?! You bastard I have nothing!<</womanasianbeg>>
<<button "Fight her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Poor woman', maxHp: 10, weapon: 'fist' },
],
allies: [],
onWin: "strangerWomanCombatWinAsian",
onLose: "GameOver"
})>>
<<goto "Combat">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><<set $reputation -= 5>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_asian",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><<set $reputation -= 5>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_black",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>>Content Disclaimer
This is a dark, post-apocalyptic survival game featuring morally complex choices, adult themes, and strong consequences.
The game does not glorify violence or immoral behavior - instead, it presents players with difficult decisions and lets them face the consequences.
All NSFW scenes involve consensual interactions between fictional characters and are portrayed within the narrative context.
The world is brutal, but your choices define who you become - for better or worse.<<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/hungryOrphans.jpg"></center>
The hatch opens with a hiss. Three malnourished children stand before you. One is trembling, the youngest girl starts crying.
<<kid>>Please... We lost our parents. Can we have some water?<</kid>>
<center><b>Requested item:</b><br>
<<= setup.renderItemList([{ id: "water", qty: [1] }])>></center>
<<nobr>> <<if $water > 0>>
<<button "Give them a bottle of water">>
<<set $water -= 1>>
<<set $reputation += 5>>
<<goto "hungryOrphansWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<button "Close the hatch">><<set $reputation -= 5>><<goto "Bunker">><</button>><</nobr>><center><img src="assets/characters/neighbor/hungryOrphansWater.jpg"></center>
The children rushed to the bottle of water you gave them. Despite his obvious thirst, the oldest boy first gave water to his younger sister and only drank himself at the end.
<<kid>>I don't mean to be rude, but could you give us something to eat? We haven't eaten in days... At least one can for her...<</kid>>
The boy said in a sad and modest voice.
<center><b>Requested item:</b><br>
<<= setup.renderItemList([{ id: "cannedFood", qty: [2] }])>></center>
<<nobr>> <<if $cannedFood >= 1>><<button "Give his little sister one food can">><<set $cannedFood -= 1>><<set $reputation += 5>><<goto "hungryOrphansFoodGood">><</button>><</if>>
<<if $cannedFood >= 2>><<button "Give them two food cans">><<set $cannedFood -= 2>><<set $reputation += 10>><<goto "hungryOrphansFoodGood1">><</button>><</if>>
<<if $cannedFood is 0>><<button "I'm so sorry... I don't have any food myself...">><<goto "Bunker">><</button>><<else>><<button "I gave you water, don't abuse my generosity. Go away.">><<set $reputation -= 1>><<goto "Bunker">><</button>><</if>><</nobr>> <<set _rewardList = ["goldRing", "goldWatch"]>><<set _reward = _rewardList.random()>>You reached into your supplies and took out two cans of food. When the children saw this, their eyes lit up with disbelief and hope. The little girl smiled and grabbed one can, while the older boy hesitated for a moment as if unsure whether to accept such generosity.
<center><img src="assets/characters/neighbor/hungryOrphansFood1.jpg"></center>
<<kid>>Are you sure? That's a lot...<</kid>>
You nodded silently and handed the food over.
The children sat down right next to the hatch and began to eat immediately. The youngest girl devoured her meal with enthusiasm, while the boy opened his can slowly, savoring the moment. He offered some to his little sister, but she refused with a giggle - clearly full and happy.
As they finished eating, the boy stood up, wiped his mouth with a sleeve, and pulled something from his pocket.
<<kidhappy>>My mom... She wore this. But you saved my sister. It's only fair. Please take it. It's the least we can do.<</kidhappy>>
<<if _reward == "goldRing">>
<p>He hands you a small <b>gold ring</b>, clearly worn and old.</p>
<<elseif _reward == "goldWatch">><p>He offers you a <b>gold watch</b>, scratched but still working.</p><</if>>
<<nobr>><<button "Accept it">><<if _reward == "goldRing">><<set $goldRing += 1>><</if>><<if _reward == "goldWatch">><<set $goldWatch += 1>><</if>><<goto "Bunker">><</button>>
<<button "Keep it. You'll need it more than I do.">><<set $reputation += 5>><<goto "Bunker">><</button>><</nobr>><center><img src="assets/characters/neighbor/hungryOrphansFood.jpg"></center>
You went and took a can of food out of the cupboard, opened it and handed it to the girl. She stared in disbelief with wide eyes. When you handed her the can, she didn't know what to do for a moment and looked at her older brother. The boy nodded, signalling her to eat.
<<kid>>Eat, it's for you.<</kid>>
You could tell that the boy was very hungry, staring intently at the can. The girl ate very quickly, but halfway through she stopped and gave the rest to her brother. It was a heart-warming scene, the kind that was rarely experienced in those difficult times.
<<kidhappy>>Thank you, Mister! You are a very kind person. We will not forget you, we promise!<</kidhappy>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 10>>A ragged man and a woman stand before you. The man steps forward, desperation etched on his face.
<<neighborsad>>Show him...<</neighborsad>>
<center><img src="assets/characters/neighbor/manSellingWife.webp"></center>
<<neighborsad>>Three cans of food. That’s all I ask. Take her. She’ll do whatever you want.<</neighborsad>>
<<womanhorny>>Yes... Please, I'll do whatever you want...<</womanhorny>>
<center><b>Requested item:</b><br>
<<= setup.renderItemList([{ id: "cannedFood", qty: [3] }])>></center>
<<nobr>><<if $cannedFood >= 3>>
<<button "Agree to the trade">>
<<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "afterDeal"
})>>
<<set $cannedFood -= 3>>
<<goto "RandomNSFW">>
<</button>>
<<else>>
<button disabled>Locked: you need 3 canned food</button>
<</if>>
<<button "Threaten them - give up everything">><<goto "manSellingWifeFight">><</button>>
<<button "Tell them to go away">><<goto "Bunker">><</button>><</nobr>><center><img src="assets/characters/neighbor/whiteManRequest.webp"></center>
<<neighborsad>>Come on, darling, let's kill him and take what we need from this place.<</neighborsad>>
<<button "Fight them">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Poor man', maxHp: 20, weapon: 'fist' },
{ spritePrefix: 'survivorFemale', name: 'Poor woman', maxHp: 10, weapon: 'fist' },
],
allies: [],
onWin: "manSellingWifeFightWin",
onLose: "GameOver"
})>> <<goto "Combat">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>Married couple are wounded and helpless. What do you want to do with them?</p>
<<nobr>><<button "Spare them">><<set $reputation += 2>><<goto "Bunker">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/gangSurvivor.webp"></center>
You opened the hatch. A wounded man stumbled in, barely able to stand. His arm was bandaged with a dirty cloth, and his gang tattoos were still visible despite the grime. He fell to his knees and coughed.
<<bandit>>I’m not here to fight... I escaped my crew. They left me for dead. Please... I just need help...<</bandit>>
You could see the fear in his eyes and the blood soaking through his makeshift bandage.
<center><b>Requested items:</b><br>
<<= setup.renderItemList([
{ id: "firstAid", qty: [1] },
{ id: "bandage", qty: [1] }
])>></center>
<<nobr>> <<if $firstAid > 0 and $bandage > 0>>
<<button "Use a medkit and bandage to help him">>
<<set $firstAid -= 1>>
<<set $bandage -= 1>>
<<goto "gangSurvivorHelped">>
<</button>>
<<else>>
<button disabled>Locked: you need 1 medkit and 1 bandage</button>
<</if>>
<<button "Let him earn it">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "medic"
})>><<set $reputation -= 5>><<goto "RandomNSFW">><</button>>
<<button "Kill him before he becomes a problem">><<goto "KillAfterFight">><</button>>
<<button "Throw him out of the bunker">><<goto "Bunker">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/knifeWoman.webp"></center>
You unlock the hatch and pull it open cautiously. A woman stumbles back, startled by the sudden motion. Her clothes are torn and soaked, her skin pale and streaked with grime. She looks malnourished - her cheeks sunken, eyes wide with desperation.
She stands just outside the hatch, swaying slightly, and you notice she keeps one hand hidden behind her back.
<<womanwhitebeg>>Please... I just need food. Anything. I haven't eaten in days...<</womanwhitebeg>>
She glances around nervously, as if expecting someone or something to appear behind her. The tension in her posture doesn’t ease, and that hidden hand remains clenched out of sight.
<center><b>Requested item:</b><br>
<<= setup.renderItemList([{ id: "cannedFood", qty: [1] }])>></center>
<<nobr>> <<if $cannedFood > 0>>
<<button "Give her food">>
<<set $cannedFood -= 1>>
<<set $reputation += 5>>
<<goto "knifeWomanFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Tell her to fuck off">><<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Desperate woman', maxHp: 15, weapon: 'knife' },
],
allies: [],
onWin: "strangerWomanCombatWin",
onLose: "GameOver"
})>><<goto "Combat">>
<</button>><</nobr>><<set $knife += 1>><<set $firstAid -= 1>><<set $bandage -= 1>><<set $reputation += 5>><<addmins 90>><<set $player.energy -= 20>>You patch up his wound carefully. He grimaces but stays still, breathing heavily. For a moment, there’s only silence between you, until he finally speaks.
<center><img src="assets/characters/neighbor/gangSurvivorHelped.webp"></center>
<<bandit>>Before the bombs, I owned a small bakery. Had a wife... Two kids.
We used to wake up early, knead dough, joke around. Then... Everything vanished. I wandered for weeks. Got picked up by a crew... said they'd protect me if I pulled my weight. So I did things. Bad things. Told myself it was just survival.
But when I got injured, they didn’t even hesitate. Left me in the dirt like trash.
I thought this world had no more people... Only broken monsters in human skin like myself.
But you... You helped me. You reminded me what it means to be human.
Here. Take this knife. I won’t need it anymore.
I’m done hurting others just to keep breathing.<</bandit>>
He places a battered combat knife in your hand, then slowly walks toward the exit, not looking back.
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "knife", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/subtleCoughing.jpg"></center>
<p>You slowly open the hatch. Cold air rushes in. A frail, trembling old man stumbles forward, coughing violently. His eyes are bloodshot, and dried blood stains the corner of his mouth. He falls to his knees just inside the entrance, barely able to speak.</p>
<<oldman>>Khhr... Hhgg... They took... *cough*... Down there... It fell... I-I tried... But... Nghhh...<</oldman>>
<nobr><<button "Ask what he means">><<goto "subtleCoughingAsk">><</button>>
<<button "Attack him">><<run setup.startCombat({
enemies: [
{ id: "raider1", name: "Barely alive man", maxHp: 1, damage: 1 },
],
allies: [],
onWin: "strangerManCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Leave him be">><<set $reputation -= 5>><<goto "Bunker">><</button>></nobr><<set $firstAid -= 1>><<set $bandage -= 1>><<set $reputation += 5>>You clean and dress his wound. He winces, but thanks you with a quiet nod.
<center><img src="assets/characters/neighbor/gangSurvivorHelped.webp"></center>
<<bandit>>At least you keep your word... I owe you. I won’t forget this.<</bandit>>
You’re not sure if you’ll see him again.
<<button "Next">><<goto "Bunker">><</button>><<addmins 30>><<set $player.energy -= 10>>You slowly reach behind you, retrieving a dented can of food. No sudden moves. You hold it out, arm extended with a gesture of peace.
<center><img src="assets/characters/neighbor/knifeWoman.webp"></center>
The woman hesitates. Her eyes flick from the can to your face, searching for a trap. Then, with trembling fingers, she accepts the offering.
<<womanwhitebeg>>I... I thought no one would ever... Thank you.<</womanwhitebeg>>
She sinks to her knees on the cold concrete, clutching the can to her chest as if it were something sacred. A tear carves a clean path down her cheek.
<<womanwhitebeg>>I was starting to think kindness died with the world...<</womanwhitebeg>>
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "cannedFood", qty: [1] }])>></center>
<nobr><<button "Let her go">><<goto "Bunker">><</button>>
<<button "Attack her">><<run setup.startCombat({
enemies: [
{ id: "survivorFemale", name: "Woman with knife", maxHp: 20, damage: 6 },
],
allies: [],
onWin: "strangerWomanCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>></nobr><<addmins 60>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/blockedHatch.webp"></center>
<p>You open the heavy metal door. A gaunt man stumbles back, startled by the noise. Dirt clings to his clothes, and a crowbar hangs limply in his hand.</p>
<<oldman>>Shit... You actually opened it. I thought... Never mind. Listen...<</oldman>>
<p>He jerks his thumb toward a crumbling building across the street.</p>
<<oldman>>There’s another hatch down there, sealed shut. I heard stories... Military cache, meds, rations. But I can’t get it open. Too rusted, or stuck, I dunno.
You help me crack it, we split whatever’s inside. Deal?<</oldman>>
<<nobr>><<if $player.strength >= 10>>
<<button "Use strength to break it open">>
<<goto "blockedHatchStr">>
<</button>>
<<else>>
<button disabled>Locked: need 10 Strength</button>
<</if>>
<<if $player.intelligence >= 10>>
<<button "Use improvised tools to open it">>
<<goto "blockedHatchInt">>
<</button>>
<<else>>
<button disabled>Locked: need 10 Intelligence</button>
<</if>>
<<button "Refuse and return to the bunker">><<goto "Bunker">><</button>><</nobr>><<addmins 60>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/trappedChild.webp"></center>
<p>You open the hatch. A tear-streaked woman stumbles in, her voice trembling.</p>
<<womanwhitebeg>>Thank God... Please! My daughter! She’s trapped beneath a collapsed building. I tried, but I can’t move the rubble alone. Please, help me!<</womanwhitebeg>>
<nobr> <<button "Clear the rubble">><<goto "trappedChildHelp">><</button>>
<<button "Refuse to help">><<set $reputation -= 5>><<goto "Bunker">><</button>></nobr><<if $player.strength > 14>><<addmins 180>><<set $player.endurance += 2>><<set $player.strength += 2>><center><img src="assets/characters/neighbor/trappedChildHelp.jpg"></center>
<p>You rush out with determination and begin moving the massive concrete slabs with your bare hands. Your strength cuts through the wreckage like a machine.</p>
<p>After a few tense minutes, you find the girl, terrified but alive. You help her crawl out.</p>
<<womanwhitebeg>>Thank you... We don’t have anything to offer, but I’ll never forget what you did today.<</womanwhitebeg>>
You gained +2 <b>strength</b> and +2 <b>endurance</b>.<<else>><<addmins 640>><<set $player.energy -= 80>><<set $player.endurance += 4>><<set $player.strength += 4>><center><img src="assets/characters/neighbor/trappedChildHelp.jpg"></center>
<p>You weren’t strong enough to lift the debris quickly, but you refused to give up.</p>
<p>At first, you clear enough for the child to breathe. Then hour after hour, you fight through exhaustion, shoveling, prying, dragging rubble away.</p>
<p>Eventually, your persistence pays off. She crawls out coughing and crying.</p>
<<womanwhitebeg>>Thank you... We don’t have anything to give you, but we’ll remember this. I promise.<</womanwhitebeg>>
You gained +4 <b>strength</b> and +4 <b>endurance</b>.<</if>><<set $reputation += 5>>
<<button "Return to the bunker">><<goto "Bunker">><</button>><<run setup.AddItemsList("add")>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You wipe the sweat from your brow as the man collapses at your feet, bleeding and groaning. Around you lie scattered supplies and you grab everything you can carry.</p>
<b>You received:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<p>The adrenaline slowly fades. You turn to face him. He's still alive - barely. One eye swollen shut, breath ragged, hand trembling as he reaches toward the crowbar that failed him.</p>
<p>You plant your foot on it before he can touch it.</p>
<p>He looks up at you with something between hatred and regret.</p>
<p><i>You have what you came for. But do you leave him here to suffer? Or finish what he started?</i></p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<addmins 180>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/blockedHatch.webp"></center>
<p>You follow the man to the collapsed entrance of a maintenance shaft. Rusted shut and warped by time, the second hatch groans under pressure. You grip the edge and strain with all your might.</p>
<p>After a loud snap and a cloud of rust flakes, the hatch gives way, slamming open with a metallic clang.</p>
<<oldman>>Thanks for doing the hard part. But I lied. I’m not sharing shit.<</oldman>>
<<button "Fight him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Old man', maxHp: 35, weapon: 'club' },
],
allies: [],
onWin: "blockedHatchWin",
onLose: "GameOver"
})>> <<goto "Combat">><</button>><<addmins 60>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/blockedHatch.webp"></center>
<p>You kneel next to the hatch and inspect its mechanism. The man hovers anxiously over your shoulder.</p>
<p>With some scavenged wire, a shard of metal, and careful leverage, you hear a satisfying click, then the hatch creaks open.</p>
<</if>>
<p>The man stares at the dark hole below. His posture shifts, the tension in his shoulders hardens. Then he grips the crowbar tighter.</p>
<<oldman>>Thanks for doing the hard part. But I lied. I’m not sharing shit.<</oldman>>
<<button "Fight him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Old man', maxHp: 35, weapon: 'club' },
],
allies: [],
onWin: "blockedHatchWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>><<addmins 60>><<set $player.energy -= 10>><<if $player.intelligence > 6>><center><img src="assets/characters/neighbor/subtleCoughing.jpg"></center>
<p>You kneel beside him, trying to make sense of his words. He struggles, but manages to speak more clearly through the pain.</p>
<<oldman>>I'm... Dying... Please... A medkit... They left me here... I just need to breathe...<</oldman>>
<<nobr>><<if $firstAid > 0>><<button "Give him a first aid kit">><<set $firstAid -= 1>><<goto "subtleCoughingmedkit">><</button>>
<<button "Attack him">><<run setup.startCombat({
enemies: [
{ id: "raider1", name: "Barely alive man", maxHp: 1, damage: 1 }
],
allies: [],
onWin: "strangerManCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Leave him be">><<set $reputation -= 5>><<goto "Bunker">><</button>><</nobr>><<else>><p>You reach for a medkit, but realize you don’t have one. The old man gasps weakly one last time... And then goes still.</p>
<<button "Next">> <<goto "Bunker">><</button>><</if>><<elseif $player.intelligence <= 5>><center><img src="assets/characters/neighbor/subtleCoughing.jpg"></center>
<p>You lean in, trying to understand him, but it’s mostly incoherent gibberish.</p>
<<oldman>>Nnngh... not... time... hhrghh... down... took it... fallin'... *cough*<</oldman>>
<p>You try to guess what he's trying to say:</p>
<<nobr>> <<if $water > 0>>
<<button "Do you want water?">>
<<goto "subtleCoughingDied">>
<</button>>
<<else>>
<button disabled>Locked: need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Do you want food?">>
<<goto "subtleCoughingDied">>
<</button>>
<<else>>
<button disabled>Locked: need canned food</button>
<</if>>
<<if $firstAid > 0>>
<<button "Do you need a medkit?">>
<<set $firstAid -= 1>>
<<goto "subtleCoughingmedkit">>
<</button>>
<<else>>
<button disabled>Locked: need medkit</button>
<</if>>
<<button "Repeat what you just said">><<goto "subtleCoughingDied">><</button>>
<<button "Attack him">><<run setup.startCombat({
enemies: [
{ id: "raider1", name: "Barely alive man", maxHp: 1, damage: 1 },
],
allies: [],
onWin: "strangerManCombatWin",
onLose: "GameOver"
})>>
<<goto "Combat">><</button>>
<<button "Leave him be">><<set $reputation -= 5>><<goto "Bunker">><</button>><</nobr>><</if>><center><img src="assets/characters/neighbor/subtleCoughingDied.jpg"></center>
<p>You stayed for a moment longer, watching as his trembling grew weaker. His breath turned into dry, shallow gasps… Then silence.</p>
<p>He slumped against the wall, eyes half-open, staring into nothing. You closed the hatch and stepped away, the air colder than before.</p>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 10>><<set $player.intelligence += 1>><<set $reputation += 5>><center><img src="assets/characters/neighbor/subtleCoughing1.jpg"></center>
<p>You hand him the first aid kit. With trembling fingers, he fumbles it open and injects something into his thigh.</p>
<p>Moments pass. His breathing steadies. The trembling fades.</p>
<<if $player.intelligence > 12>><<set $player.intelligence += 1>><<run setup.AddItemsList("add")>><p>He leans back, voice still hoarse but more coherent.</p>
<<oldman>>There’s... A place nearby. Metal door behind the old diner. I left my wife's jewelry there - didn’t want the bastards to take it. It’s yours now. You saved me.<</oldman>>
<p>You nod and follow his directions. Behind the collapsed diner, buried under rubble, you find a rusted hatch. Inside, a small tin box holds a golden ring and an old-fashioned watch. When you return - he's gone.</p>
<b>You received:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>>
<<else>><p>He mutters something under his breath. Still too weak to speak clearly.</p>
<oldman>Th-they... T-took… C-can’t… Nghh…</oldman>
<p>Maybe if you ask the right question, he’ll respond.</p>
<<nobr>> <<button "What jewelry?">><<goto "subtleCoughingIntSuccess">><</button>>
<<button "What weapon are you talking about?">><<goto "subtleCoughingWrong">><</button>>
<<button "Who were the raiders?">><<goto "subtleCoughingWrong">><</button>>
<<button "Is someone in danger?">><<goto "subtleCoughingWrong">><</button>><</nobr>><</if>><<set $player.intelligence += 1>><<run setup.AddItemsList("add")>><center><img src="assets/characters/neighbor/subtleCoughing1.jpg"></center>
<p>He leans back, voice still hoarse but more coherent.</p>
<<oldman>>There’s... A place nearby. Metal door behind the old diner. I left my wife's jewelry there - didn’t want the bastards to take it. It’s yours now. You saved me.<</oldman>>
<p>You nod and follow his directions. Behind the collapsed diner, buried under rubble, you find a rusted hatch. Inside, a small tin box holds a golden ring and an old-fashioned watch. When you return - he's gone.</p>
<b>You received:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><center><img src="assets/characters/neighbor/subtleCoughing1.jpg"></center>
<p>The man mumbled something unintelligible and slumped against the bunker wall. You checked - he was still breathing, barely. Whatever strength he had left was gone.</p> <p>You stood over him for a while, uncertain. Then, in the distance, you spotted movement - figures that looked like raiders. Without hesitation, you closed the hatch.</p> <p>Later, you kept checking the camera feed. He was always there... Until he wasn't.</p>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/womanGenerator.webp"></center>
<p>You open the hatch. The woman rushes in, wide-eyed and breathless, clutching a small battery in her arms.</p>
<<womanwhitebeg>>Thank God you're here! Please... I need your help. My car's battery is dead and I was trying to connect it to a generator. If I can't get it running, my brother won't make it through the night...<</womanwhitebeg>>
<p>She points toward the car outside, its hood popped open. A small, portable generator lies on the ground nearby, wires coiled in a tangle.</p>
<nobr><<button "Help her set it up">><<goto "womanGeneratorHelp">><</button>>
<<button "Refuse and close the hatch">><<set $reputation -= 3>><<goto "Bunker">><</button>>
<<button "Attack her">><<run setup.startCombat({
enemies: [
{ id: "raider1", name: "Poor woman", maxHp: 10, damage: 1 },
],
allies: [],
onWin: "strangerWomanCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>></nobr><<addmins 60>><<set $player.energy -= 10>><<if $player.intelligence > 11>><<set $player.intelligence += 1>><<set $reputation += 5>><center><img src="assets/characters/neighbor/womanGeneratorBad.jpg"></center>
<p>You examine the tangled wires and spot the issue immediately. With a confident flick of your wrist, you connect the battery and stabilize the voltage.</p>
<p>The engine roars to life. The woman gasps, overwhelmed.</p>
<<womanwhitebeg>>You... You actually did it! Thank you so much. I owe you everything.<</womanwhitebeg>>
You gained +1 <b>intelligence</b>.
<<button "Next">><<goto "Bunker">><</button>><<else>><<set _roll = random(1, 100)>><<if _roll >= 80>><center><img src="assets/characters/neighbor/womanGeneratorBad.jpg"></center>
<p>You fumble through the cables, trying to follow logic you barely remember. Sparks fly.</p>
<p><strong>CRACK!</strong> A jolt of electricity hits you, causing your muscles to spasm.</p><<set $player.health -= 20>><<set $player.energy -= 15>>
<p>The woman winces. She doesn’t say anything but looks concerned.</p>
You lost -20 <b>health</b>.
<<button "Try again">><<goto "womanGeneratorHelp">><</button>>
<<button "Give up">><<goto "Bunker">><</button>><<elseif _roll >= 45>><<set $player.intelligence += 1>><<set $reputation += 5>><center><img src="assets/characters/neighbor/womanGeneratorBad.jpg"></center>
<p>You hesitate for a moment, then take a chance. The connection sparks.</p>
<p>The engine sputters… And comes to life.</p>
<<womanwhitebeg>>I don’t know how you managed that, but... It worked! Thank you.<</womanwhitebeg>>
<p>She drives off, throwing you a grateful smile through the cracked windshield.</p>
You gained +1 <b>intelligence</b>.
<<button "Next">><<goto "Bunker">><</button>><<else>><center><img src="assets/characters/neighbor/womanGeneratorBad.jpg"></center>
<p>You mess with the cables for a while, but nothing happens. The battery makes a strange noise and the generator emits a brief spark, then goes silent again.</p>
<p>The woman frowns, biting her lip anxiously.</p>
<<button "Try again">><<goto "womanGeneratorHelp">><</button>>
<<button "Give up">><<goto "Bunker">><</button>><</if>><</if>><<addmins 60>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/sickMan.jpg"></center>
<p>You crack open the hatch. The man lies curled at the base of the wall, shivering, his eyes glassy and unfocused. A deep, discolored wound festers on his leg.</p>
<p>He mumbles something unintelligible, sweat pouring down his face. The smell of rot hits you hard.</p>
<nobr><<if $player.intelligence >= 6>><<button "Inspect the wound">><<goto "sickManDiagnose">><</button>><<else>><<button "Try to help him">><<goto "sickManBlindHelp">><</button>><</if>>
<<button "Leave him alone">><<set $reputation -= 5>><<goto "Bunker">><</button>></nobr><<addmins 60>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/sickManHelp.jpg"></center>
<p>You take a closer look at the leg. The tissue is blackened and swollen, clearly necrotic. You recognize the signs immediately: <b>advanced gangrene</b>.</p>
<p>If untreated, it will spread. He’ll be dead in hours.</p>
<<nobr>> <<button "Amputate the infected tissue">><<goto "sickManGoodHelp">><</button>>
<<if $water > 0>>
<<button "Give him water">>
<<goto "sickManWater">>
<</button>>
<<else>>
<button disabled>Locked: need water</button>
<</if>>
<<button "Do nothing">><<set $reputation -= 5>><<goto "Bunker">><</button>><</nobr>> <center><img src="assets/characters/neighbor/sickManHelp.jpg"></center>
<p>You kneel beside him. The leg wound looks <i>bad</i>, but you’re not sure what’s wrong exactly. Maybe he just needs water? Or maybe it’s infected?</p>
<<nobr>> <<if $water > 0>>
<<button "Give him water">>
<<goto "sickManWater">>
<</button>>
<<else>>
<button disabled>Locked: need water</button>
<</if>>
<<button "Clean the wound">><<goto "sickManBadHelp">><</button>>
<<button "Leave him">><<set $reputation -= 5>><<goto "Bunker">><</button>><</nobr>> <div class="crafting-item"> <img class="crafting-img" src="assets/ui/camera.jpg" alt="Camera">
<div class="crafting-details">\
<div class="crafting-title">Camera</div>
<div class="crafting-desc">Monitors movement in the bunker. May unlock special events.</div>
<div class="crafting-cost">Requires: 10x Wood, 5x Scrap Metal</div>\
\
<<if $wood >= 10 and $scrapMetal >= 5 and !$camera>>\
<button class="crafting-button"
onclick="
const v = SugarCube.State.variables;
v.wood -= 10;
v.scrapMetal -= 5;
v.camera = true;
if (v.gameTime instanceof Date) {
v.gameTime.setMinutes(v.gameTime.getMinutes() + 120);
}
SugarCube.Engine.play('crafting');
">Build</button>
<<elseif $camera>>\
<span class="crafting-built">Built</span>\
<<else>>\
<span class="crafting-missing">Not enough materials</span><</if>>\
</div>\
</div>
\
<div class="crafting-item">
<img class="crafting-img" src="assets/ui/bed.jpg" alt="Bed">
<div class="crafting-details">\
<div class="crafting-title">Upgraded Bed</div>
<div class="crafting-desc">Restores more energy when sleeping or napping.</div>
<div class="crafting-cost">Requires: 15x Wood</div>\
\
<<if $wood >= 15 and !$bedUpgrade>>\
<button class="crafting-button"
onclick="
const v = SugarCube.State.variables;
v.wood -= 15;
v.bedUpgrade = true;
if (v.gameTime instanceof Date) {
v.gameTime.setMinutes(v.gameTime.getMinutes() + 90);
}
SugarCube.Engine.play('crafting');
">Build</button>
<<elseif $bedUpgrade>>\
<span class="crafting-built">Built</span>\
<<else>>\
<span class="crafting-missing">Not enough materials</span>\
<</if>>\
</div>\
</div>
\
<div class="crafting-item">
<img class="crafting-img" src="assets/ui/gym.jpg" alt="Gym">
<div class="crafting-details">\
<div class="crafting-title">Upgraded Gym</div>
<div class="crafting-desc">Grants more strength per training session.</div>
<div class="crafting-cost">Requires: 12x Scrap Metal</div>\
\
<<if $scrapMetal >= 12 and !$gymUpgrade>>\
<button class="crafting-button"
onclick="
const v = SugarCube.State.variables;
v.scrapMetal -= 12;
v.gymUpgrade = true;
if (v.gameTime instanceof Date) {
v.gameTime.setMinutes(v.gameTime.getMinutes() + 60);
}
SugarCube.Engine.play('crafting');
">Build</button>
<<elseif $gymUpgrade>>\
<span class="crafting-built">Built</span>\
<<else>>\
<span class="crafting-missing">Not enough materials</span>\
<</if>>\
</div>\
</div>
\
<div class="crafting-item">
<img class="crafting-img" src="assets/ui/showerup.jpg" alt="Shower">
<div class="crafting-details">\
<div class="crafting-title">Upgraded Shower</div>
<div class="crafting-desc">Improves hygiene and saves time during showering.</div>
<div class="crafting-cost">Requires: 8x Wood, 5x Scrap Metal</div>\
\
<<if $wood >= 8 and $scrapMetal >= 5 and !$showerUpgrade>>\
<button class="crafting-button"
onclick="
const v = SugarCube.State.variables;
v.wood -= 8;
v.scrapMetal -= 5;
v.showerUpgrade = true;
if (v.gameTime instanceof Date) {
v.gameTime.setMinutes(v.gameTime.getMinutes() + 60);
}
SugarCube.Engine.play('crafting');
">Build</button>
<<elseif $showerUpgrade>>\
<span class="crafting-built">Built</span>\
<<else>>\
<span class="crafting-missing">Not enough materials</span>\
<</if>>\
</div>\
</div>
\
<div class="crafting-item">
<img class="crafting-img" src="assets/ui/radio.jpg" alt="Radio">
<div class="crafting-details">\
<div class="crafting-title">Radio</div>
<div class="crafting-desc">Allows you to try contacting the outside world. Essential for reaching an ending.</div>
<div class="crafting-cost">Requires: 10x Electronics, 5x Scrap Metal</div>\
\
<<if $electronics >= 10 and $scrapMetal >= 5 and !$radio>>\
<button class="crafting-button"
onclick="
const v = SugarCube.State.variables;
v.electronics -= 10;
v.scrapMetal -= 5;
v.radio = true;
if (v.gameTime instanceof Date) {
v.gameTime.setMinutes(v.gameTime.getMinutes() + 90);
}
SugarCube.Engine.play('crafting');
">Build</button>
<<elseif $radio>>\
<span class="crafting-built">Built</span>\
<<else>>\
<span class="crafting-missing">Not enough materials</span>\
<</if>>\
</div>\
</div>
<<button "Back">><<goto "Bunker">><</button>><div class="trade-header">Your Funds: $<<=$currency>> | Trader Reputation: <<= Math.round(($traderRep||0)*10)/10 >></div>
<div class="tabs"><button class="tab" data-tab="buy">Buy</button><button class="tab" data-tab="sell">Sell</button></div>
<div id="tab-buy"></div><div id="tab-sell" style="display:none"></div>
<<button "Leave">><<goto "Bunker">><</button>><<run State.variables.gameTime.setHours(22, 0)>><<include "NightPhase">><center><h1>Companions</h1></center>
<<if $player.companions.length === 0>>
<p>You don't have any companions to talk to.</p>
<</if>><div class="training-grid">\
<<for _char range $player.companions>>\
<<set _npc = $npcs.find(n => n.id === _char)>>\
<<if _npc>>\
<<capture _localChar>>\
<<set _localChar = _char>>\
<div class="training-tile">\
<a data-passage="CompanionScene"
class="companion-link"
data-setter="
$currentCompanion = _localChar;
setup.startCompanionNSFW({
scenes: _localChar,
text: 'female'
});
setup.enterNSFWMusic();
">\
<<print '<img src="assets/characters/' + _localChar + '/default.jpg" alt="">'>> \
<div class="label"><<=_npc.name>></div>\
</a>\
</div>\
<</capture>>\
<</if>>\
<</for>>\
</div>\
<<button "Back">><<goto "bedroom">><</button>><<script>>
setup.buildInventoryGrid = function () {
const V = State.variables;
const defs = V.items || [];
const counts = {};
defs.forEach(def => {
const q = Number(V[def.id] || 0);
if (q > 0) counts[def.id] = q;
});
let html = '<div class="inventory-grid">';
Object.entries(counts).forEach(([id, qty]) => {
const def = defs.find(d => d.id === id);
if (!def) return;
html += `<div class="inventory-item"><img src="${def.icon || `assets/img/items/${id}.jpg`}" alt="${def.name || id}"><div class="inv-info"><span class="inv-name">${def.name || id}</span><span class="inv-qty">×${qty}</span></div></div>`;
});
html += '</div>';
return html;
};
<</script>><center><h2>Your Inventory</h2></center>
<<= setup.buildInventoryGrid()>>
<button class="button" onclick="SugarCube.Engine.play(SugarCube.State.variables.return)">Close</button><<set $player.reputation -= 2>><<set $water -= 1>><center><img src="assets/characters/neighbor/sickManDead.jpg"></center>
You handed him a bottle of water. The man took a few sips, then vomited blood. After a moment, he closed his eyes and his body became stiff.
<<you>>Poor bastard... Rest in peace.<</you>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 15>><<set $player.reputation += 1>> <center><img src="assets/characters/neighbor/sickManDead.jpg"></center>
<p>You try to clean the wound, but it’s worse than expected. The man cries out in agony, then goes limp. You realize too late you made it worse.</p>
<<you>> Fuck! Poor bastard... Maybe if I were smarter, I could help him... Rest in peace.<</you>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 120>><<set $player.reputation += 5>><<set $player.intelligence += 2>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/sickManHelpGood.jpg"></center>
You took a saw and some alcohol. Then the scene turned into a bloody horror movie when you started cutting off the man's infected leg. He lost consciousness from the pain. Then you bandaged and secured the wound.
<<you>>I couldn't do anything else. I don't know how he'll manage, but at least he won't die because of his leg.<</you>>
You went to put the equipment away, and when you came back, the man was gone.
You gained +2 <b>intelligence</b>.
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/guardianAngel1.jpg"></center>
You opened the hatch and saw a little kitten.
<<nobr>><<button "Take care of the cat">><<set $catAngel to true>><<goto "Bunker">><</button>>
<<button "Close the hatch">><<set $reputation -= 5>><<goto "Bunker">><</button>><</nobr>><<addmins 60>><<set $player.energy -= 10>><center><<print setup.getCompanionImage(1)>></center>
<<companion>>Hi, we don't know each other, but I have nowhere to go. Could you give me a shelter? I'll be useful to you!<</companion>>
<<nobr>> <<if setup.canRecruitMore()>>
<<button "Accept her and add to the bunker">>
<<run setup.addCompanion(State.variables.recruitCandidateId, true)>>
<<set $recruitCandidateId = null>>
<<run State.variables.player.companions =
(State.variables.player.companions || []).map(c => typeof c === "string" ? c : c.id)>>
<<goto "Bunker">>
<</button>>
<<else>>
<<button "Accept her and add to the bunker">><<goto "RecruitDecisionAcceptKick">><</button>>
<</if>>
<<button "Reject her">><<goto "Bunker">><</button>><</nobr>> <<set _cand = $npcs.find(n => n.id === $recruitCandidateId)>>
<p>Your bunker is full. Choose someone to replace with <<= _cand ? _cand.name : $recruitCandidateId>>.</p>
<div class="training-grid">
<<for _c range $player.companions>>
<<set _cid = _c>>
<<set _npc = $npcs.find(n => n.id === _cid)>>
<div class="training-tile">
<<print '<img src="assets/characters/' + _cid + '/default.jpg" alt="">'>>
<div class="label"><<= _npc ? _npc.name : _cid >></div>
<<print '<button class="btn-replace" onclick="setup.replaceCompanion(\'' + _cid + '\')">Replace</button>'>></div><</for>></div>
<<button "Cancel">><<set $recruitCandidateId = null>><<goto "Bunker">><</button>><<set $trader = false>><center><img src="assets/characters/neighbor/trader.jpg"></center>
<<trader>>You're going to die, and you know it.<</trader>>
<<button "Fight">><<run setup.startCombat({
enemies: [
{ spritePrefix: 'trader', name: 'Trader', maxHp: 70, weapon: 'pistol' },
],
allies: [],
onWin: "traderCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>><<set _loot = ($traderItems || []).slice()>><<run setup.lootTrader()>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You defeated the trader and seized his supplies.</p>
<b>You received:</b>
<<= setup.renderItemList(_loot, { style: "inline", size: 80 })>>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/shemaleRequest.webp"></center>
A feminine-looking person started flirting with you.
<<womanhorny>>Would you like to have some fun? Just so you know, I have a really big penis. Do you like feminine-looking guys?<</womanhorny>>
<<nobr>><<button "Agree">><<run setup.startNSFW({
text: "male",
scenes: "male_trans",
option: "afterDeal"
})>><<goto "RandomNSFW">><</button>>
<<button "Attack">><<goto "strangerShemaleRequestFight">><</button>>
<<button "No, thanks">><<goto "Bunker">><</button>><</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><<set $reputation -= 5>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The feminine-looking guy is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_trans",
option: "afterDeal"
})>><<goto "RandomNSFW">><</button>><</button>><</nobr>><center><img src="assets/characters/neighbor/shemaleAttack.webp"></center>
<<womanhorny>>I could beat your ass in bed, but I can also beat you in a fight.<</womanhorny>>
<<button "Fight">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Trans woman', maxHp: 20, weapon: 'knife' },
],
allies: [],
onWin: "strangerShemaleCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>[
{
"id": "earthquakeTremor",
"title": "Earthquake Tremor",
"image": "assets/characters/neighbor/earthquakeTremor.webp",
"text": "The ground shuddered. Dust rained from the ceiling. Something heavy toppled over in the storage room.",
"repeatable": true,
"minItem": {
"cannedFood": 1,
"water": 1
},
"effects": [
{ "type": "statChange", "healthRange": [-5, -1] },
{
"type": "eventItems",
"mode": "give",
"items": [
{ "id": "cannedFood", "qtyRange": [1, 2] },
{ "id": "water", "qtyRange": [1, 2] }
]
}
],
"choices": [
{ "text": "Continue", "passage": "earthquakeTremor" }
]
},
{
"id": "waterLeak",
"title": "Water Leak",
"image": "assets/characters/neighbor/waterLeak.webp",
"text": "A pipe inside the wall burst. A puddle spreads under your shelves as precious water trickles away.",
"repeatable": true,
"minItem": {
"water": 1
},
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [{ "id": "water", "qtyRange": [1, 3] }]
}
],
"choices": [
{ "text": "Continue", "passage": "waterLeak" }
]
},
{
"id": "quietGift",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows an empty street. Whoever left the parcel is long gone.",
"imageWithCamera": "assets/characters/neighbor/quietGift.jpg",
"repeatable": false,
"minReputation": 1,
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [40, 90]
}
],
"choices": [
{ "text": "Open the hatch", "passage": "quietGift" },
{ "text": "Ignore it", "passage": "Bunker" }
]
},
{
"id": "warningShout",
"title": "Warning Shout",
"image": "assets/characters/neighbor/warningShout.jpg",
"text": "A voice outside shouts a warning about raiders nearby. Then, silence.",
"textWithCamera": "The camera catches a fleeting shadow sprinting past the lens, then nothing.",
"imageWithCamera": "assets/characters/neighbor/warningShout.jpg",
"repeatable": true,
"minReputation": 1,
"effects": [
{ "type": "statBoost", "statPool": ["intelligence"] }
],
"choices": [
{ "text": "Continue", "passage": "warningShout" }
]
},
{
"id": "graffitiOnHatch",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera feed shows only a fragment of fresh scrape marks on the metal near the lens.",
"imageWithCamera": "assets/characters/neighbor/cameraNothing.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{ "type": "statChange", "healthRange": [-2, -1] }
],
"choices": [
{ "text": "Open the hatch", "passage": "graffitiOnHatch" },
{ "text": "Ignore it", "passage": "Bunker" }
]
},
{
"id": "stoneThrow",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera catches the tail of a coat as someone darts out of frame.",
"imageWithCamera": "assets/characters/neighbor/cameraGangSurvivor.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{ "type": "statChange", "healthRange": [-5, -2] }
],
"choices": [
{ "text": "Open the hatch", "passage": "stoneThrow" },
{ "text": "Ignore it", "passage": "Bunker" }
]
},
{
"id": "boobyTrap",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows fresh grooves and metal shavings around the hatch.",
"imageWithCamera": "assets/characters/neighbor/cameraNothing.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{ "type": "statChange", "healthRange": [-15, -8] }
],
"choices": [
{ "text": "Open the hatch", "passage": "boobyTrap" },
{ "text": "Ignore it", "passage": "Bunker" }
]
},
{
"id": "coldNight",
"title": "Cold Night",
"image": "assets/characters/neighbor/coldNight.jpg",
"text": "The temperature dropped sharply. Sleep was shallow and stiff with shivers.",
"repeatable": true,
"effects": [
{ "type": "statChange", "healthRange": [-3, -1] }
],
"choices": [
{ "text": "Continue", "passage": "coldNight" }
]
},
{
"id": "ratsInWalls",
"title": "Rats in the Walls",
"image": "assets/characters/neighbor/ratsInWalls.jpg",
"text": "Scratching swells behind the walls. By morning, a torn sack is all that's left.",
"repeatable": true,
"minItem": {
"cannedFood": 1
},
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [{ "id": "cannedFood", "qtyRange": [1, 2] }]
}
],
"choices": [
{ "text": "Continue", "passage": "ratsInWalls" }
]
},
{
"id": "rustyPipe",
"title": "Rusty Pipe",
"image": "assets/characters/neighbor/waterLeak.webp",
"text": "A corroded pipe split overnight. The floor is damp and smells like metal.",
"repeatable": true,
"minItem": {
"cannedFood": 1,
"water": 1
},
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{ "id": "water", "qtyRange": [1, 2] },
{ "id": "cannedFood", "qtyRange": [0, 1] }
]
}
],
"choices": [
{ "text": "Continue", "passage": "rustyPipe" }
]
},
{
"id": "dustCloud",
"title": "Dust Cloud",
"image": "assets/characters/neighbor/dustCloud.jpg",
"text": "A fine cloud of dust fills the corridor after something shook loose.",
"repeatable": true,
"effects": [
{ "type": "statChange", "healthRange": [-8, -3] }
],
"choices": [
{ "text": "Continue", "passage": "dustCloud" }
]
},
{
"id": "safeKnock",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "A shy figure leaves the bundle and hurries away the moment your camera whirs.",
"imageWithCamera": "assets/characters/neighbor/safeKnock.jpg",
"repeatable": true,
"minReputation": 1,
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [30, 70]
}
],
"choices": [
{ "text": "Open the hatch", "passage": "safeKnock" },
{ "text": "Ignore it", "passage": "Bunker" }
]
},
{
"id": "helpfulNote",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "A figure hesitates at the hatch, then slides a folded slip of paper toward the seam and vanishes.",
"imageWithCamera": "assets/characters/neighbor/helpfulNote.jpg",
"repeatable": true,
"minReputation": 1,
"effects": [
{ "type": "statBoost", "statPool": ["intelligence"] }
],
"choices": [
{ "text": "Open the hatch", "passage": "helpfulNote" },
{ "text": "Ignore it", "passage": "Bunker" }
]
},
{
"id": "returnedFavor",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "The camera shows only the bag and a fading set of footsteps in the dust.",
"imageWithCamera": "assets/characters/neighbor/quietGift.jpg",
"repeatable": false,
"minReputation": 1,
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": [
{ "id": "bandage", "qty": [1] },
{ "id": "cannedFood", "qty": [1] }
]
}
],
"choices": [
{ "text": "Open the hatch", "passage": "returnedFavor" },
{ "text": "Ignore it", "passage": "Bunker" }
]
},
{
"id": "threateningMark",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "There was no one in front of the bunker hatch.",
"imageWithCamera": "assets/characters/neighbor/cameraNothing.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{ "type": "statChange", "healthRange": [-3, -1] }
],
"choices": [
{ "text": "Open the hatch", "passage": "threateningMark" },
{ "text": "Ignore it", "passage": "Bunker" }
]
},
{
"id": "friendlyTipSupermarket",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "The camera catches a lone figure jogging away from your hatch, hood pulled low.",
"imageWithCamera": "assets/characters/neighbor/friendlyTipSupermarket.jpg",
"repeatable": false,
"minReputation": 0,
"effects": [],
"choices": [
{ "text": "Open the hatch", "passage": "unlockSupermarket" },
{ "text": "Ignore it", "passage": "Bunker" }
]
}
]
[
{
"id": "generousNeighbor",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
30,
90
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. In front of the bunker, you noticed a friendly-looking figure. You hear loud banging on the bunker hatch.",
"imageWithCamera": "assets/characters/neighbor/cameragenerous.jpg",
"minReputation": 0,
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "generousNeighbor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "needyNeighborItem",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
},
{
"type": "statBoost",
"statPool": [
"intelligence",
"endurance",
"strength"
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameraneedy.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You noticed a couple of people who looked friendly.",
"minReputation": 0,
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "needyNeighbor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "needyNeighbor",
"effects": [
{
"type": "statBoost",
"statPool": [
"intelligence",
"endurance",
"strength"
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameraneedy.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You noticed a couple of people who looked friendly.",
"minReputation": 0,
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "needyNeighbor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "hornyNeighbor",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
},
{
"type": "randomRoll5050",
"randomKey": "hornyRoll"
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameraHorny.webp",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You notice a woman who looks horny.",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "hornyNeighbor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "bunkerBandits",
"effects": [],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameraBandits.webp",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You noticed a few men who looked like bandits.",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "bunkerBandits"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "bunkerSoldiers",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
},
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
50,
120
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/soldier.webp",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You peek through the camera before reacting. You noticed a soldier, but you felt that he was not alone.",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "bunkerSoldiers"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "hiddenStash",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
50,
120
]
},
{
"type": "randomRoll5050",
"randomKey": "stashRoll"
},
{
"type": "statChange",
"healthRange": [
-10,
-1
]
}
],
"image": "assets/characters/neighbor/hiddenStash.webp",
"title": "Hidden stash",
"text": "While cleaning up, you came across some hidden supplies that you had forgotten about.",
"repeatable": true,
"choices": [
{
"text": "Open it",
"passage": "hiddenStash"
},
{
"text": "Leave it alone",
"passage": "Bunker"
}
]
},
{
"id": "oldManual",
"image": "assets/characters/neighbor/book.jpg",
"title": "Old manual",
"text": "While cleaning up, you came across some old manual book.",
"repeatable": true,
"effects": [
{
"type": "statBoost",
"statPool": [
"intelligence"
]
}
],
"choices": [
{
"text": "Read it",
"passage": "manualRead",
"applyEffects": true
},
{
"text": "Toss it",
"passage": "Bunker"
}
]
},
{
"id": "spoiledFood",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qtyRange": [
1,
3
]
}
]
}
],
"image": "assets/characters/neighbor/checkFood.jpg",
"title": "Spoiled food",
"text": "You smelled something. It must be the food supplies.",
"repeatable": true,
"minItem": {
"cannedFood": 1
},
"choices": [
{
"text": "Inspect the supplies",
"passage": "checkSpoiledFood"
},
{
"text": "Throw them away",
"passage": "removeSpoiledFood"
}
]
},
{
"id": "ratInfestation",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qtyRange": [
1,
3
]
}
]
}
],
"image": "assets/characters/neighbor/rats.webp",
"title": "Rats",
"text": "You noticed rats running around the bunker.",
"repeatable": true,
"minItem": {
"cannedFood": 1
},
"choices": [
{
"text": "Set traps",
"passage": "ratTrap"
},
{
"text": "Burn infested food",
"passage": "ratBurn"
}
]
},
{
"id": "toxicGasWarning",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
80,
150
]
}
],
"image": "assets/characters/neighbor/toxicGas.webp",
"title": "Toxic Warning",
"text": "A sudden high-pitched siren echoed through the bunker walls. Seconds later, green gas began seeping in through the air vents. You rushed to the control panel and managed to shut off the flow.You wonder if stepping outside would reveal the source of the alert.",
"textWithCamera": "Your camera detected no movement near the hatch. Yet, green gas lingers around the vents. The siren still rings in your ears.",
"imageWithCamera": "assets/characters/neighbor/toxicGas.webp",
"minReputation": 0,
"repeatable": true,
"choices": [
{
"text": "Put on gas mask and step outside",
"passage": "toxicGasLoot",
"condition": "$gasMask > 0"
},
{
"text": "Stay inside and wait",
"passage": "Bunker"
}
]
},
{
"id": "dullKnife",
"minItem": {
"knife": 1
},
"image": "assets/characters/neighbor/brokenKnife.webp",
"title": "Dull Blade",
"text": "You realise that your knife blade is losing its edge. In this state, it's useless in a fight.",
"repeatable": false,
"choices": [
{
"text": "Try to fix it",
"condition": "$scrapMetal > 0",
"passage": "knifeFix"
},
{
"text": "Leave it be",
"passage": "knifeIgnore"
}
]
},
{
"id": "wetMapCorner",
"title": "Wet map",
"image": "assets/characters/neighbor/brokenMap.jpg",
"text": "While examining your map, you tore one corner. Moments later, you knocked over a cup of water, soaking it. The ink is already smudging.",
"repeatable": false,
"minItem": {
"map": 1
},
"choices": [
{
"text": "Patch it",
"passage": "mapFix"
},
{
"text": "Throw it",
"passage": "mapIgnore"
}
]
},
{
"id": "brokenSuitcaseHandle",
"title": "Broken Handle",
"image": "assets/characters/neighbor/suitcaseBroken.jpg",
"text": "While sprinting, the handle of your suitcase gave in with a loud snap. Carrying it like this will be cumbersome.",
"repeatable": false,
"minItem": {
"suitcase": 1
},
"choices": [
{
"text": "Fix it",
"passage": "suitcaseFix"
},
{
"text": "Leave it broken",
"passage": "suitcaseIgnore"
}
]
},
{
"id": "tornBackpack",
"title": "Torn Backpack",
"image": "assets/characters/neighbor/bagBroken.jpg",
"text": "As you squeezed through a tight corridor, your backpack caught on something sharp and tore open.",
"repeatable": false,
"minItem": {
"bag": 1
},
"choices": [
{
"text": "Sew it carefully",
"passage": "backpackFix"
},
{
"text": "Leave it behind",
"passage": "backpackIgnore"
}
]
},
{
"id": "damagedPistol",
"title": "Jammed Gun",
"image": "assets/characters/neighbor/pistolBroken.jpg",
"text": "Your pistol misfired. It’s dirty, and the mechanism seems worn down. You fear it might backfire next time.",
"repeatable": false,
"minItem": {
"pistol": 1
},
"choices": [
{
"text": "Disassemble and repair it",
"condition": "$scrapMetal > 0",
"passage": "pistolFix"
},
{
"text": "Discard it",
"passage": "pistolIgnore"
}
]
},
{
"id": "crackedBat",
"title": "Cracked Bat",
"image": "assets/characters/neighbor/batBroken.jpg",
"text": "After smashing something too hard, your bat now has a long split down its middle. One more hit and it might shatter.",
"repeatable": false,
"minItem": {
"bat": 1
},
"choices": [
{
"text": "Reinforce it",
"condition": "$wood > 0",
"passage": "batFix"
},
{
"text": "Toss it",
"passage": "batIgnore"
}
]
},
{
"id": "leakingBottle",
"title": "Leaking Bottle",
"image": "assets/characters/neighbor/waterBroken.jpg",
"text": "You notice a slow drip from your water bottle. The cap seems loose or cracked.",
"repeatable": false,
"minItem": {
"water": 1
},
"choices": [
{
"text": "Seal it with some scrap",
"condition": "$scrapMetal > 0",
"passage": "waterFix"
},
{
"text": "Drink what you can and toss it",
"passage": "waterIgnore"
}
]
},
{
"id": "moldyBandages",
"title": "Moldy Bandages",
"image": "assets/characters/neighbor/bandageBroken.jpg",
"text": "You check your medical box and discover that some bandages are damp and growing mold.",
"repeatable": false,
"minItem": {
"bandage": 1
},
"choices": [
{
"text": "Dry them near a heat source",
"passage": "bandageFix"
},
{
"text": "Toss the moldy ones",
"passage": "bandageIgnore"
}
]
},
{
"id": "expiredMedkit",
"title": "Expired Medkit",
"image": "assets/characters/neighbor/firstAidFix.jpg",
"text": "While organizing your supplies, you notice the medkit is past its expiration date.",
"repeatable": false,
"minItem": {
"firstAid": 1
},
"choices": [
{
"text": "Keep it - it might still work",
"passage": "medkitKeep"
},
{
"text": "Dismantle for useful parts",
"passage": "medkitScrap"
}
]
},
{
"id": "flickeringFlashlight",
"title": "Flickering Flashlight",
"image": "assets/characters/neighbor/flashlightBroken.jpg",
"text": "Your flashlight started flickering, making it unreliable for exploration.",
"repeatable": false,
"minItem": {
"flashlight": 1
},
"choices": [
{
"text": "Open and try to repair it",
"condition": "$scrapMetal > 0",
"passage": "flashlightFix"
},
{
"text": "Toss it away",
"passage": "flashlightIgnore"
}
]
},
{
"id": "strangerWomanKnockWhite",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A woman stands outside, looking exhausted but harmless. She keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbegging.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerWomanRequestWhite"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerManKnockWhite",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A man stands outside, looking exhausted but harmless. He keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarsad.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerManRequestWhite"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerWomanKnockBlack",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A woman stands outside, looking exhausted but harmless. She keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbeggingblack.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerWomanRequestBlack"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerManKnockBlack",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A man stands outside, looking exhausted but harmless. He keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarblackmanbeg.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerManRequestBlack"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerWomanKnockAsian",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. A woman stands outside, looking exhausted but harmless. She keeps banging on the metal hatch.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbeggingasian.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerWomanRequestAsian"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "strangerShemaleRequest",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud Banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You decided to use your camera before opening it. A woman was standing outside and smiling at the camera.",
"imageWithCamera": "assets/characters/neighbor/shemaleRequest.webp",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "strangerShemaleRequest"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "travelerWithCaptive",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the camera, you noticed a man wearing a gas mask carrying a woman in his arms.",
"imageWithCamera": "assets/characters/neighbor/cameraTravelerWithCaptive.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "travelerWithCaptive"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "hungryOrphans",
"effects": [],
"image": "assets/characters/neighbor/softknock.jpg",
"imageWithCamera": "assets/characters/neighbor/hungryOrphans.jpg",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"textWithCamera": "You peek through the camera. A group of ragged children are outside your bunker. Thin, cold, and clearly starving. They hold up empty cans, hoping for mercy.",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "hungryOrphans"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "manSellingWife",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qty": [
3
]
}
]
}
],
"image": "assets/characters/neighbor/banging.jpg",
"imageWithCamera": "assets/characters/neighbor/cameragenerous.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. In front of the bunker, you noticed a friendly-looking figure. You hear loud banging on the bunker hatch.",
"repeatable": true,
"choices": [
{
"text": "Open it",
"passage": "manSellingWife"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "gangSurvivor",
"title": "Soft knocking",
"image": "assets/characters/neighbor/softknock.jpg",
"text": "You hear soft knocking on the bunker hatch. Someone is gently trying to get your attention.",
"textWithCamera": "You turn on the camera. A wounded man slumps against the hatch, blood on his clothes. His breathing is shallow.",
"imageWithCamera": "assets/characters/neighbor/cameraGangSurvivor.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "gangSurvivor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "knifeWoman",
"title": "Loud banging",
"image": "assets/characters/neighbor/banging.jpg",
"text": "You hear loud banging on the bunker hatch. Whoever it is, they want in - badly.",
"textWithCamera": "Looking through the camera, you spotted a frail-looking woman. She appeared desperate, pacing nervously in front of the bunker hatch. One of her hands was hidden behind her back.",
"imageWithCamera": "assets/characters/neighbor/womanGenerator.webp",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "knifeWoman"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "silenceAfterStorm",
"title": "Silence After the Storm",
"image": "assets/characters/neighbor/silenceAfterStorm.webp",
"text": "After several nights of howling winds and thunder shaking the bunker walls, the world outside has gone completely silent. No rain. No wind. No birds. Just… Stillness.",
"textWithCamera": "The camera shows an eerily still landscape. Mud and broken branches litter the area, but not a soul is in sight. The silence is deafening.",
"imageWithCamera": "assets/characters/neighbor/cameraSilenceAfterStorm.webp",
"repeatable": false,
"choices": [
{
"text": "Continue",
"passage": "Bunker"
}
]
},
{
"id": "distantScream",
"title": "Distant Scream",
"image": "assets/characters/neighbor/scream.jpg",
"text": "You hear a scream in the distance. Sharp. Human. Then… A gunshot. Then silence.",
"textWithCamera": "The camera picks up nothing but fog and faint rustling. Whatever happened, it’s over now. The silence that follows is somehow worse.",
"imageWithCamera": "assets/characters/neighbor/cameraDistantScream.jpg",
"repeatable": false,
"choices": [
{
"text": "Continue",
"passage": "Bunker"
}
]
},
{
"id": "blockedHatch",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
50,
150
]
}
],
"title": "Loud Banging",
"image": "assets/characters/neighbor/banging.jpg",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera showed a dirty man holding a crowbar. He was staring directly into the lens, gesturing wildly as if trying to point you toward something across the street.",
"imageWithCamera": "assets/characters/neighbor/cameraBlockedHatch.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "blockedHatch"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "trappedChild",
"title": "Loud Banging",
"image": "assets/characters/neighbor/banging.jpg",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera revealed a desperate woman, slamming her fists against the hatch and waving her hands toward the lens, pleading as if begging for help.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbegging.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "trappedChild"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "subtleCoughing",
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": [
{
"id": "goldWatch",
"qty": [
1
]
},
{
"id": "goldRing",
"qty": [
1
]
}
]
}
],
"title": "Soft knocking",
"image": "assets/characters/neighbor/softknock.jpg",
"text": "You hear soft knocking on the bunker hatch. Someone is gently trying to get your attention.",
"textWithCamera": "The camera shows an old man sitting by the bunker wall. He is wrapped in rags and trembling. He softly knocks, coughs, and stares directly at the camera.",
"imageWithCamera": "assets/characters/neighbor/cameraGangSurvivor.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "subtleCoughing"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "womanGenerator",
"title": "Loud Banging",
"image": "assets/characters/neighbor/banging.jpg",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the camera feed, a desperate woman is hammering at the hatch with both fists. A battered car is parked behind her, trunk wide open. She keeps turning around, pointing toward it, and gesturing frantically at the camera.",
"imageWithCamera": "assets/characters/neighbor/avatarwomanbegging.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "womanGenerator"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "sickMan",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "On the camera feed, a sweating man lies on the ground, clearly feverish. He clutches his side and murmurs incoherently, occasionally reaching toward the hatch.",
"imageWithCamera": "assets/characters/neighbor/cameraGangSurvivor.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "sickMan"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "guardianAngel",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you decided to use your camera. In front of the bunker, you noticed a figure running away. Only a cute-looking cat remained under the hatch.",
"imageWithCamera": "assets/characters/neighbor/guardianAngel.webp",
"repeatable": false,
"choices": [
{
"text": "Open It",
"passage": "guardianAngel"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "recruitVisit",
"effects": [
{
"type": "newCompanion"
}
],
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"image": "assets/characters/neighbor/banging.jpg",
"textWithCamera": "Before opening it, you decided to use your camera. In front of the bunker, you noticed a friendly looking person.",
"imageWithCamera": "assets/characters/neighbor/recruitDecision.jpg",
"repeatable": true,
"isRecruit": true,
"choices": [
{
"text": "Open It",
"passage": "RecruitDecision"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "earthquakeTremor",
"title": "Earthquake Tremor",
"image": "assets/characters/neighbor/earthquakeTremor.webp",
"text": "The ground shuddered. Dust rained from the ceiling. Something heavy toppled over in the storage room.",
"repeatable": true,
"minItem": {
"cannedFood": 1,
"water": 1
},
"effects": [
{
"type": "statChange",
"healthRange": [
-5,
-1
]
},
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qtyRange": [
1,
2
]
},
{
"id": "water",
"qtyRange": [
1,
2
]
}
]
}
],
"choices": [
{
"text": "Continue",
"passage": "earthquakeTremor",
"applyEffects": true
}
]
},
{
"id": "waterLeak",
"title": "Water Leak",
"image": "assets/characters/neighbor/waterLeak.webp",
"text": "A pipe inside the wall burst. A puddle spreads under your shelves as precious water trickles away.",
"repeatable": true,
"minItem": {
"water": 1
},
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "water",
"qtyRange": [
1,
3
]
}
]
}
],
"choices": [
{
"text": "Continue",
"passage": "waterLeak"
}
]
},
{
"id": "quietGift",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows an empty street. Whoever left the parcel is long gone.",
"imageWithCamera": "assets/characters/neighbor/quietGift.jpg",
"repeatable": false,
"minReputation": 1,
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
40,
90
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "quietGift"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "warningShout",
"title": "Warning Shout",
"image": "assets/characters/neighbor/warningShout.jpg",
"text": "A voice outside shouts a warning about raiders nearby. Then, silence.",
"textWithCamera": "The camera catches a fleeting shadow sprinting past the lens, then nothing.",
"imageWithCamera": "assets/characters/neighbor/warningShout.jpg",
"repeatable": true,
"minReputation": 1,
"effects": [
{
"type": "statBoost",
"statPool": [
"intelligence"
]
}
],
"choices": [
{
"text": "Continue",
"passage": "warningShout"
}
]
},
{
"id": "graffitiOnHatch",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera feed shows only a fragment of fresh scrape marks on the metal near the lens.",
"imageWithCamera": "assets/characters/neighbor/cameraNothing.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{
"type": "statChange",
"healthRange": [
-2,
-1
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "graffitiOnHatch",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "stoneThrow",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera catches the tail of a coat as someone darts out of frame.",
"imageWithCamera": "assets/characters/neighbor/cameraGangSurvivor.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{
"type": "statChange",
"healthRange": [
-5,
-2
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "stoneThrow",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "boobyTrap",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows fresh grooves and metal shavings around the hatch.",
"imageWithCamera": "assets/characters/neighbor/cameraNothing.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{
"type": "statChange",
"healthRange": [
-15,
-8
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "boobyTrap",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "coldNight",
"title": "Cold Night",
"image": "assets/characters/neighbor/coldNight.jpg",
"text": "The temperature dropped sharply. Sleep was shallow and stiff with shivers.",
"repeatable": true,
"effects": [
{
"type": "statChange",
"healthRange": [
-3,
-1
]
}
],
"choices": [
{
"text": "Continue",
"passage": "coldNight",
"applyEffects": true
}
]
},
{
"id": "ratsInWalls",
"title": "Rats in the Walls",
"image": "assets/characters/neighbor/ratsInWalls.jpg",
"text": "Scratching swells behind the walls. By morning, a torn sack is all that's left.",
"repeatable": true,
"minItem": {
"cannedFood": 1
},
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "cannedFood",
"qtyRange": [
1,
2
]
}
]
}
],
"choices": [
{
"text": "Continue",
"passage": "ratsInWalls"
}
]
},
{
"id": "rustyPipe",
"title": "Rusty Pipe",
"image": "assets/characters/neighbor/waterLeak.webp",
"text": "A corroded pipe split overnight. The floor is damp and smells like metal.",
"repeatable": true,
"minItem": {
"cannedFood": 1,
"water": 1
},
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": [
{
"id": "water",
"qtyRange": [
1,
2
]
},
{
"id": "cannedFood",
"qtyRange": [
0,
1
]
}
]
}
],
"choices": [
{
"text": "Continue",
"passage": "rustyPipe"
}
]
},
{
"id": "dustCloud",
"title": "Dust Cloud",
"image": "assets/characters/neighbor/dustCloud.jpg",
"text": "A fine cloud of dust fills the corridor after something shook loose.",
"repeatable": true,
"effects": [
{
"type": "statChange",
"healthRange": [
-8,
-3
]
}
],
"choices": [
{
"text": "Continue",
"passage": "dustCloud",
"applyEffects": true
}
]
},
{
"id": "safeKnock",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "A shy figure leaves the bundle and hurries away the moment your camera whirs.",
"imageWithCamera": "assets/characters/neighbor/safeKnock.jpg",
"repeatable": true,
"minReputation": 1,
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": "generated",
"lootRange": [
30,
70
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "safeKnock"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "helpfulNote",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "A figure hesitates at the hatch, then slides a folded slip of paper toward the seam and vanishes.",
"imageWithCamera": "assets/characters/neighbor/helpfulNote.jpg",
"repeatable": true,
"minReputation": 1,
"effects": [
{
"type": "statBoost",
"statPool": [
"intelligence"
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "helpfulNote",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "returnedFavor",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "The camera shows only the bag and a fading set of footsteps in the dust.",
"imageWithCamera": "assets/characters/neighbor/quietGift.jpg",
"repeatable": false,
"minReputation": 1,
"effects": [
{
"type": "eventItems",
"mode": "add",
"items": [
{
"id": "bandage",
"qty": [
1
]
},
{
"id": "cannedFood",
"qty": [
1
]
}
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "returnedFavor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "threateningMark",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "There was no one in front of the bunker hatch.",
"imageWithCamera": "assets/characters/neighbor/cameraNothing.jpg",
"repeatable": true,
"maxReputation": -1,
"effects": [
{
"type": "statChange",
"healthRange": [
-3,
-1
]
}
],
"choices": [
{
"text": "Open the hatch",
"passage": "threateningMark",
"applyEffects": true
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "friendlyTipSupermarket",
"title": "Soft knocking",
"text": "You hear soft, hesitant knocking on the bunker hatch. It's not aggressive - more like someone pleading.",
"image": "assets/characters/neighbor/softknock.jpg",
"textWithCamera": "The camera catches a lone figure jogging away from your hatch, hood pulled low.",
"imageWithCamera": "assets/characters/neighbor/friendlyTipSupermarket.jpg",
"repeatable": false,
"minReputation": 1,
"effects": [],
"choices": [
{
"text": "Open the hatch",
"passage": "unlockSupermarket"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderPistol",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Before opening it, you check the camera. A wary woman holds a bundle close to her chest.",
"imageWithCamera": "assets/characters/neighbor/TraderPistol.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderPistol"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderMap",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You switch on the camera. A man in a torn coat unrolls a weathered map and taps it, glancing around nervously.",
"imageWithCamera": "assets/characters/neighbor/TraderMap.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderMap"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderRing",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows a tired woman lifting a small golden ring toward the lens.",
"imageWithCamera": "assets/characters/neighbor/cameraTraderRing.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderRing"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderWatch",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the feed, a scruffy man dangles a golden watch by its chain.",
"imageWithCamera": "assets/characters/neighbor/cameraTraderWatch.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderWatch"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderScrap",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera catches a sly-looking man rummaging in a satchel of wires and metal bits.",
"imageWithCamera": "assets/characters/neighbor/TraderScrap.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderScrap"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderBook",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "An old vagabond clutches a dusty book to his chest, bowing toward the lens as if pleading for a fair trade.",
"imageWithCamera": "assets/characters/neighbor/TraderBook.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderBook"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "TraderFake",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A shabby man unwraps a lumpy bundle toward the camera. He looks like a trader.",
"imageWithCamera": "assets/characters/neighbor/TraderFake.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "TraderFake"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "EastereggCode",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You switch on the camera, but see no one outside. Just the wind and dust swirling.",
"imageWithCamera": "assets/characters/neighbor/EastereggCode.jpg",
"repeatable": false,
"choices": [
{
"text": "Open it",
"passage": "EastereggCode"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "BanditWoman",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You switch on the camera. A rough-looking woman in torn clothes stands there, clutching a knife and glaring at the hatch.",
"imageWithCamera": "assets/characters/neighbor/BanditWoman.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "BanditWoman"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "BrokenFlashlight",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "You check the camera. A gaunt man stands there, holding a broken flashlight and fidgeting with exposed wires.",
"imageWithCamera": "assets/characters/neighbor/BrokenFlashlight.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "BrokenFlashlight"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "SealedBox",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the feed a nervous woman holds a small, rusted metal box with a combination lock; she traces the numbers with a trembling finger.",
"imageWithCamera": "assets/characters/neighbor/cameraSealedBox.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "SealedBox"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "MapPuzzle",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows an old traveler holding a torn, annotated map and a scrap of paper covered in odd symbols - he looks to you, hopeful.",
"imageWithCamera": "assets/characters/neighbor/MapPuzzle.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "MapPuzzle"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "WaterVisitor",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "On the camera a lone traveler lifts a single bottle of water toward the lens.",
"imageWithCamera": "assets/characters/neighbor/WaterVisitor.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "WaterVisitor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "FoodVisitor",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Through the camera you see a ragged woman raising a single can of food.",
"imageWithCamera": "assets/characters/neighbor/FoodVisitor.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "FoodVisitor"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "ThievesCoupleMF",
"image": "assets/characters/neighbor/banging.jpg",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
}
],
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "The camera shows a man and a woman standing close together. Their clothes are rough and they keep glancing around nervously.",
"imageWithCamera": "assets/characters/neighbor/cameraThievesCoupleMF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "ThievesCoupleMF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "ThievesDuoFF",
"effects": [
{
"type": "eventItems",
"mode": "give",
"items": "owned"
}
],
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Two women stand side by side.",
"imageWithCamera": "assets/characters/neighbor/cameraThievesDuoFF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "ThievesDuoFF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "BetrayalArgument",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A man and a woman argue loud enough for the camera to pick up clipped words - accusations, anger, and something like regret in her face.",
"imageWithCamera": "assets/characters/neighbor/cameraBetrayalArgument.jpg",
"repeatable": false,
"maxReputation": -1,
"choices": [
{
"text": "Open It",
"passage": "BetrayalArgument"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "MadDrifter",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A disheveled man peers at the lens, one hand on the grip of a worn pistol; his eyes blaze with a single, terrible story.",
"imageWithCamera": "assets/characters/neighbor/cameraMadDrifter.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "MadDrifter"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "CodeWomanDirectionsA",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A lone woman stands with a travel–worn face, holding a scrap of paper and pointing towards the horizon as if asking for directions.",
"imageWithCamera": "assets/characters/neighbor/CodeWomanDirectionsA.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "CodeWomanDirectionsA"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "CodeWomanDirectionsB",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A different woman, younger and exhausted, presses a cracked compass into view and asks softly if you can point her the right way.",
"imageWithCamera": "assets/characters/neighbor/cameraCodeWomanDirectionsB.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "CodeWomanDirectionsB"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "CoupleRestlessMF",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A tired couple leans on each other for a moment; they look like they’ve walked a long way and need a place to rest.",
"imageWithCamera": "assets/characters/neighbor/cameraCoupleRestlessMF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "CoupleRestlessMF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "YoungLoversMF",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A young pair stands pressed close, whispering urgently - they look frightened, but their bond is obvious.",
"imageWithCamera": "assets/characters/neighbor/cameraYoungLoversMF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "YoungLoversMF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "EstrangedPartnersFF",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "Two women stand before the lens – one looks furious, the other ashamed. There is an awkward silence between them.",
"imageWithCamera": "assets/characters/neighbor/cameraEstrangedPartnersFF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "EstrangedPartnersFF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
},
{
"id": "SexyBeggarsFF",
"image": "assets/characters/neighbor/banging.jpg",
"title": "Loud banging",
"text": "You hear loud banging on the bunker hatch.",
"textWithCamera": "A pair of women with good looks were standing in front of the hatch, where they engaged in some light-hearted teasing directed at the camera.",
"imageWithCamera": "assets/characters/neighbor/cameraSexyBeggarsFF.jpg",
"repeatable": true,
"choices": [
{
"text": "Open It",
"passage": "SexyBeggarsFF"
},
{
"text": "Ignore it",
"passage": "Bunker"
}
]
}
]
<div class="mainmenu-center"><div class="mainmenu-stack"><button class="menubutton" onclick="SugarCube.Engine.play('EnterName')">New game</button>
<button class="menubutton continue">Continue</button>
<button class="menubutton" onclick="SugarCube.Engine.play('About')">About</button>
<button class="menubutton" onclick="SugarCube.Engine.play('Credits')">Credits</button>
<button class="menubutton" onclick="SugarCube.Engine.play('CheckMyOtherGame')">Check my other game</button>
<div style="color: #777; font-size: 12px; text-align: center; margin-top: 8px;">Version 0.03</div></div></div> <p><b>This is a work of literary fiction.</b><br>
All characters, stories, and dialogues are fictional and do not represent real people or events.
All visual materials (images, animations, videos) used in this game are sourced from legal pornographic websites.
They remain the property of their respective copyright holders and are used with original watermarks intact.
To view this content legally, you must have a valid membership to the original sites.</p>
Featured Actresses
The following are the stage names (pseudonyms) of the actresses featured as companions in this game:
Dee - Hayley Davies
Maria - Autumn Falls
Isabel - Kira Noir
Mia - Vina Sky
Rose - Savannah Bond
Rae - Rae lil black
Lily - Comatozze
<h3>Special Thanks</h3>
<p>Special thanks to all my patrons for your very generous and amazing support.<br>
Without you, this game would not exist.</p>
<button class="button" onclick="SugarCube.Engine.play('MainMenu')">Close</button>If you enjoy my work and prefer sandbox-style experiences, you might like my first project as well. It’s available on Patreon, SubscribeStar, and the F95Zone forum. You can also play it online at Mopoga or Destroyer.tv.
<center><div style="margin-top: 10px; text-align: center;">
<a href="https://www.patreon.com/TestovironTesto" target="_blank"><img src="assets/ui/3.png" style="height: 50px; margin-right: 10px;" alt="Patreon"></a><a href="https://subscribestar.adult/testoviron" target="_blank"><img src="assets/ui/sslogo.png" style="height: 50px;" alt="SubscribeStar"></a>
</div></center>
<button class="button" onclick="SugarCube.Engine.play('MainMenu')">Close</button><center><h2>They heard you.</h2></center>
<p>Hours later, a faint voice confirms your coordinates. You're getting out of here.</p>
<p>Congratulations, $player.name! You managed to survive and escape. The companions you unlocked during this playthrough have been unlocked and you can select them when you start your next adventure.</p>
<<button "Finish run">><<run setup.resetForNewRun()>><<goto "EnterName">><</button>><<addmins 60>><<set $player.energy -= 10>><center><h2>Emergency Radio</h2></center>
<center><img src="assets/ui/radio.webp" style="max-height:500px;"></center>
<p>You tune the radio and broadcast an SOS...</p>
<span id="radioBlock">
<<if $dailyradio>>
<<button "Broadcast SOS">>
<<set $dailyradio = false>>
<<set _roll = Math.random()>>
<<if _roll lt 0.95>>
<<goto "Ending">>
<<else>>
<<replace "#radioBlock">>
Static answers you back. No one responds. Maybe try again another day.
<<button "Next">><<goto "bedroom">><</button>>
<</replace>>
<</if>>
<</button>>
<</if>>
</span><div class="about"><h3><b>Goal</b></h3>
<p>Survive, build a radio, and hope someone will rescue you.</p>
<h3><b>Daily Cycle</b></h3>
<p>Each day one random event will occur. You have full freedom of choice in how to resolve it.</p>
<h3><b>Companions</b></h3>
<ul>
<li>Companions are recruited via daily events. The longer you go without a recruit event, the higher the chance it appears next day.</li>
<li>Between <b>Day 10–14</b> (depending on luck), someone is guaranteed to show up at the bunker.</li>
<li>You can host up to <b>3 companions</b> in the bunker at once.</li>
<li>Night missions for companions have two survival outcomes if danger strikes:
<ul>
<li><b>Fight victory</b> – uses their <b>equipped weapon</b> + their <b>Strength</b>.</li>
<li><b>Escape</b> – uses their <b>Intelligence</b> + <b>Endurance</b>.</li>
</ul>
It’s smart to train a companion toward one clear path (fighter or escape artist) to raise their odds.
</li>
<li>Some companions give <b>training bonuses</b>. Training with them speeds up your growth.</li>
<li><b>Meta:</b> Completing the game with companions permanently unlocks them.</li>
</ul>
<h3><b>Trader</b></h3>
<p>
Every few days a trader may visit the bunker, offering items to buy and sell.
If you’re desperate, you can try to <b>rob the trader</b> and take everything, but the trader will <b>never return</b>.
Building <b>reputation</b> with the trader unlocks better prices.
</p>
<h3><b>Night Exploration</b></h3>
<ul>
<li>Each night you may venture outside to search nearby locations. Skipping sleep will make the next day harder.</li>
<li>If the <b>player</b> goes alone, combat always uses the <b>highest-damage weapon you own</b>, regardless of what you manually picked.</li>
<li><b>Suitcase</b> & <b>Backpack</b> – increase the maximum loot you can bring back.</li>
<li><b>Map</b> – guarantees unlocking a new location.</li>
<li><b>Flashlight</b> – +10% chance to find items.</li>
</ul>
<h3><b>Survival</b></h3>
<p>
You and your companions can die if Hunger or Thirst drops to 0. The player can also die in combat, or afterwards if bleeding is not stopped with bandages in the kitchen.
<br><i>Tip:</i> Keep an eye on the sidebar (or notifications) for <b>Hunger</b> and <b>Thirst</b>.
</p>
<ul>
<li><b>Food & Water:</b> restore Energy and a small amount of Health.</li>
<li><b>Bleeding:</b> does not stop on its own and slowly drains Health until you bandage yourself in the <b>Kitchen</b> (or die).</li>
<li><b>Beaten (debuff):</b> lasts <b>3 days</b> and reduces how much Energy/Health you recover.</li>
<li><b>Kitchen items:</b>
<ul>
<li><b>Steroids:</b> bonus <b>Strength</b>, <b>Endurance</b> and <b>Energy</b> at the cost of <b>Health</b>.</li>
<li><b>Book:</b> increases <b>Intelligence</b>.</li>
<li><b>First Aid Kit:</b> instantly restores Health.</li>
</ul></li></ul>
<h3><b>NSFW Content</b></h3>
<p>The game features several erotic mini-games. Build relationships with companions to unlock new interactions.</p>
<h3><b>Stats</b></h3>
<ul>
<li><b>Strength</b> increases combat damage and maximum health.</li>
<li><b>Endurance</b> increases your energy pool.</li>
<li><b>Intelligence</b> affects how you can solve problems during random events.</li>
</ul>
<h3><b>Training Tips</b></h3>
<ul>
<li>Endurance training is <b>costly</b> – plan sessions carefully.</li>
<li>Specialize companions (fight vs. escape) for better mission outcomes.</li>
</ul>
<div class="about-actions">
<button class="button" onclick="SugarCube.Engine.play('MainMenu')">Close</button>
</div></div><<script>>
{
chat: {
label: "Chat",
requiredRelation: 0,
gainRelation: 1,
gainArousal: 0,
playerArousalGain: 0,
energyCost: 5,
timeCost: 5
},
flirt: {
label: "Flirt",
requiredRelation: 15,
gainRelation: 2,
gainArousal: 5,
playerArousalGain: 2,
energyCost: 8,
timeCost: 5
},
teasing: {
label: "Teasing",
requiredRelation: 20,
gainRelation: 1,
gainArousal: 7,
playerArousalGain: 4,
energyCost: 2,
timeCost: 5
},
kiss: {
label: "Kiss",
requiredRelation: 25,
gainRelation: 3,
gainArousal: 6,
playerArousalGain: 5,
energyCost: 2,
timeCost: 5
},
touchTits: {
label: "Touch tits",
requiredRelation: 30,
gainRelation: 2,
gainArousal: 8,
playerArousalGain: 7,
energyCost: 2,
timeCost: 5
},
touchAss: {
label: "Touch ass",
requiredRelation: 30,
gainRelation: 2,
gainArousal: 7,
playerArousalGain: 6,
energyCost: 2,
timeCost: 5
},
touchPussy: {
label: "Touch pussy",
requiredRelation: 40,
gainRelation: 2,
gainArousal: 8,
playerArousalGain: 8,
energyCost: 2,
timeCost: 5
},
fingerPussy: {
label: "Finger pussy",
requiredRelation: 45,
gainRelation: 2,
gainArousal: 10,
playerArousalGain: 9,
energyCost: 2,
timeCost: 5
},
handjob: {
label: "Handjob",
requiredRelation: 50,
requiredArousal: 12,
gainRelation: 2,
gainArousal: 10,
playerArousalGain: 14,
energyCost: 2,
timeCost: 5
},
lickPussy: {
label: "Lick pussy",
requiredRelation: 50,
gainRelation: 2,
gainArousal: 11,
playerArousalGain: 6,
energyCost: 2,
timeCost: 5
},
fingerAss: {
label: "Finger ass",
requiredRelation: 60,
gainRelation: 2,
gainArousal: 9,
playerArousalGain: 8,
energyCost: 2,
timeCost: 5
},
blowjob: {
label: "Blowjob",
requiredRelation: 75,
requiredArousal: 30,
gainRelation: 2,
gainArousal: 8,
playerArousalGain: 16,
energyCost: 2,
timeCost: 5
},
fuckPussy: {
label: "Sex",
requiredRelation: 90,
requiredArousal: 45,
gainRelation: 3,
gainArousal: 16,
playerArousalGain: 18,
energyCost: 4,
timeCost: 5
},
fuckAss: {
label: "Fuck ass",
requiredRelation: 100,
requiredArousal: 45,
gainRelation: 0,
gainArousal: 17,
playerArousalGain: 20,
energyCost: 4,
timeCost: 5
}
};
window.setup = setup;
<</script>><<if $version is 0.01>>
<<run setup.ensureNPC("rae", {
id: "rae", name: "Rae", gender: "female",
strengthMin: 2, strengthMax: 3,
enduranceMin: 5, enduranceMax: 8,
intelligenceMin: 5, intelligenceMax: 10
})>>
<<set $patronUnlocked = false>>
<<set $cheats = false>>
<<set $version = 0.02>>
<</if>>
<<if $version is 0.02>>
<<run setup.ensureNPC("lily", { id: "lily", name: "Lily", gender: "female", strengthMin:5, strengthMax:8, enduranceMin:2, enduranceMax:6, intelligenceMin:2, intelligenceMax:5 })>>
<<set $patronUnlocked = false>>
<<set $cheats = false>>
<<set $version = 0.03>>
<</if>><<nobr>><<widget "unlockLocation">>
<<set _id = _args[0]>>
<<run State.variables.unlockedLocations = Array.isArray(State.variables.unlockedLocations) ? State.variables.unlockedLocations : []>>
<<if !State.variables.unlockedLocations.includes(_id)>>
<<run State.variables.unlockedLocations.push(_id)>>
<<run setup.notify ? setup.notify("New night location unlocked: " + _id.charAt(0).toUpperCase() + _id.slice(1)) : 0>>
<</if>>
<</widget>><</nobr>><<addmins 10>><<set $player.energy -= 5>><center><img src="assets/characters/neighbor/helpfulNote.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">When you opened the hatch, nobody was there. Instead, you found a folded note warning about dangers nearby - a subtle token of gratitude from the locals for your actions.</span></div>
<<if $statRewardMessage>><p><b><<print $statRewardMessage>></b></p><</if>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 20>><<set $player.energy -= 5>><<run setup.AddItemsList("add")>><center><img src="assets/characters/neighbor/quietGift.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">When you opened the hatch, you noticed a small bundle left on the ground. Inside were useful supplies - a quiet gesture of gratitude from the local survivors for your help.</span></div>
<b>You received:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 20>><<set $player.energy -= 5>><<run setup.AddItemsList("add")>><center><img src="assets/characters/neighbor/safeKnock.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">Opening the hatch, you discovered a sack left on the ground. Inside were several useful supplies - a quiet gesture of gratitude from those who valued your help and reputation among the survivors.</span></div>
<b>You received:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 20>><center><img src="assets/characters/neighbor/threateningMark.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">You opened the hatch only to find the place deserted. On the hatch, crudely drawn in what looked like blood, was the image of a skull - a primitive warning meant to rattle you. Though you tried to shake it off, the threat gnawed at your nerves and left you weakened.</span></div>
<<if $statChangeLog && $statChangeLog.length>><div style="margin-top: 1em; font-weight: bold; color: #c00;"><<for _i = 0; _i < $statChangeLog.length; _i++>><<set _e = $statChangeLog[_i]>><center><<print _e.stat>>: <<print _e.amount>></center><</for>></div><</if>>
<<button "Next">><<set $statChangeLog = []>><<goto "Bunker">><</button>><<addmins 120>><<set $player.energy -= 20>><<run setup.applyEventItems("give", $eventItemsGive, true)>><center><img src="assets/characters/neighbor/ratsInWalls.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">A faint scratching echoed from inside the walls. By the time you checked your supplies, it was too late. Rats had already torn into part of your food, leaving only scraps behind.</span></div>
<center><b>You lost:</b></center>
<<= setup.renderItemLog($statChangeLog, { style: "grid", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 20>><center><img src="assets/characters/neighbor/coldNight.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">A bitter cold settled over the city, heavy snow burying the streets in silence. The chill crept into the bunker despite your efforts, draining your strength and leaving you weakened.</span></div>
<<if $statChangeLog && $statChangeLog.length>><div style="margin-top: 1em; font-weight: bold; color: #c00;"><<for _i = 0; _i < $statChangeLog.length; _i++>><<set _e = $statChangeLog[_i]>><center><<print _e.stat>>: <<print _e.amount>></center><</for>></div><</if>>
<<button "Next">><<set $statChangeLog = []>><<goto "Bunker">><</button>><<addmins 120>><<set $player.energy -= 20>><<run setup.applyEventItems("give", $eventItemsGive, true)>><center><img src="assets/characters/neighbor/waterLeak.webp"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">A sharp crack echoed through the pipes and cold water burst across the floor. You scrambled to clamp the leak, but in the chaos some of your supplies were ruined.</span></div>
<center><b>You lost:</b></center>
<<= setup.renderItemLog($statChangeLog, { style: "grid", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 120>><<set $player.energy -= 40>><center><img src="assets/characters/neighbor/dustCloud.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;"> A choking cloud of dust poured through the vents, turning the bunker into a haze. You coughed, eyes burning, as every breath scraped your lungs and left you weakened.</span></div>
<<if $statChangeLog && $statChangeLog.length>><div style="margin-top: 1em; font-weight: bold; color: #c00;"><<for _i = 0; _i < $statChangeLog.length; _i++>><<set _e = $statChangeLog[_i]>><center><<print _e.stat>>: <<print _e.amount>></center><</for>></div><</if>>
<<button "Next">><<set $statChangeLog = []>><<goto "Bunker">><</button>><<addmins 120>><<set $player.energy -= 50>><center><img src="assets/characters/neighbor/boobyTrap.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">The moment you pushed the hatch open, a crude trap was triggered. A frame of sharpened spikes swung down, tearing into your body before crashing to the ground. The pain was sharp, but the message was sharper - someone out there wanted you gone, and your growing infamy is catching up with you.</span></div>
<<if $statChangeLog && $statChangeLog.length>><div style="margin-top: 1em; font-weight: bold; color: #c00;"><<for _i = 0; _i < $statChangeLog.length; _i++>><<set _e = $statChangeLog[_i]>><center><<print _e.stat>>: <<print _e.amount>></center><</for>></div><</if>>
<<button "Next">><<set $statChangeLog = []>><<goto "Bunker">><</button>><<addmins 20>><<set $player.energy -= 30>><center><img src="assets/characters/neighbor/stoneThrow.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">Curious about the noise outside, you lifted the hatch only to be met by a hostile crowd. Shouts and insults filled the air as stones rained down on you. A few struck hard, leaving you bruised and weakened.</span></div>
<<if $statChangeLog && $statChangeLog.length>><div style="margin-top: 1em; font-weight: bold; color: #c00;"><<for _i = 0; _i < $statChangeLog.length; _i++>><<set _e = $statChangeLog[_i]>><center><<print _e.stat>>: <<print _e.amount>></center><</for>></div><</if>>
<<button "Next">><<set $statChangeLog = []>><<goto "Bunker">><</button>><<addmins 120>><<set $player.energy -= 20>><center><img src="assets/characters/neighbor/graffitiOnHatch.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">The hatch was covered in crude graffiti - words like <q>murder</q>, <q>cheater</q>, and <q>pig</q> scrawled in angry strokes. Whoever did this clearly despises you. Cleaning it off took time and left you shaken, your health slipping under the weight of stress.</span></div>
<<if $statChangeLog && $statChangeLog.length>><div style="margin-top: 1em; font-weight: bold; color: #c00;"><<for _i = 0; _i < $statChangeLog.length; _i++>><<set _e = $statChangeLog[_i]>><center><<print _e.stat>>: <<print _e.amount>></center><</for>></div><</if>>
<<button "Next">><<set $statChangeLog = []>><<goto "Bunker">><</button>><<addmins 10>><<set $player.energy -= 5>><center><img src="assets/characters/neighbor/warningShout.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">A sudden shout echoed through the ruins, warning you about danger lurking in a nearby district. You took the advice to heart, realizing how important it is to stay alert and learn from the vigilance of others.</span></div>
<<if $statRewardMessage>><p><b><<print $statRewardMessage>></b></p><</if>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 20>><<set $player.energy -= 5>><<run setup.AddItemsList("add")>><center><img src="assets/characters/neighbor/quietGift.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">You cautiously opened the hatch. On the ground rested a small package, wrapped with care. Inside was a short note: <q>Thank you for your help.</q></span></div>
<b>You received:</b>
<<= setup.renderItemList($eventItemsAdd, { style: "inline", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 20>><<run setup.applyEventItems("give", $eventItemsGive, true)>><center><img src="assets/characters/neighbor/waterLeak.webp"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">A sudden hiss echoed through the bunker as a pipe burst, spraying cold water across the floor. You scrambled to contain the leak, but in the chaos several supplies were ruined beyond saving.</span></div>
<center><b>You lost:</b></center>
<<= setup.renderItemLog($statChangeLog, { style: "grid", size: 80 })>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 30>><<run setup.applyEventItems("give", $eventItemsGive, true)>><center><img src="assets/characters/neighbor/earthquakeTremor.webp"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">The ground shook violently, dust and fragments of debris filled the air. You struggled to keep balance as shelves toppled and supplies scattered across the floor. By the time the tremor subsided, the bunker felt less like a shelter and more like a trap threatening to collapse at any moment.</span></div>
<<if $statChangeLog && $statChangeLog.length>><div style="margin-top: 1em; font-weight: bold; color: #c00;"><<for _i = 0; _i < $statChangeLog.length; _i++>><<set _e = $statChangeLog[_i]>><center><<print _e.stat>>: <<print _e.amount>></center><</for>></div><</if>>
<center><b>You lost:</b></center>
<<= setup.renderItemLog($statChangeLog, { style: "grid", size: 80 })>>
<<button "Next">><<set $statChangeLog = []>><<goto "Bunker">><</button>><<addmins 10>><<set $player.energy -= 5>><<unlockLocation "supermarket">><center><img src="assets/characters/neighbor/friendlyTipSupermarket.jpg"></center>
<div style="margin-top: 1em;"><span style="font-style: italic;">A folded note was wedged under the hatch: <p>“Marked a supermarket on map. Plenty of supplies left inside. Watch out for bandits. Thanks for your help.”</p></span></div>
<<you>>That's interesting...<</you>>
<<button "Next">><<goto "Bunker">><</button>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/TraderPistol.jpg"></center>
The woman steps closer, holding up a battered pistol. Her eyes dart nervously, but her voice is firm.
<<womanwhitebeg>>I don’t have time to argue. Someone close to me is hurt, and I need two medkits. This pistol is yours if you can spare them.<</womanwhitebeg>>
<<nobr>><<if $firstAid >= 2>>
<<button "Give her 2 medkits">>
<<set $firstAid -= 2>>
<<set $pistol += 1>>
<<goto "TraderPistolDeal">>
<</button>>
<<else>>
<button disabled>Locked: need 2 medkits</button>
<</if>>
<<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 30, weapon: 'pistol' },
],
allies: [],
onWin: "TraderPistolCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse">>
<<goto "Bunker">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/TraderRing.jpg"></center>
The woman lifts a small golden ring toward you. Her voice trembles, but there’s determination in her eyes.
<<womanwhitebeg>>This belonged to someone dear to me… but water and food are worth more now. Two bottles of water and two cans of food, and the ring is yours.<</womanwhitebeg>>
<<nobr>><<if $water >= 2 and $cannedFood >= 2>>
<<button "Give 2 water and 2 canned food">>
<<set $water -= 2>>
<<set $cannedFood -= 2>>
<<set $goldRing += 1>>
<<goto "TraderRingDeal">>
<</button>>
<<else>>
<button disabled>Locked: need 2 water + 2 canned food</button>
<</if>>
<<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 25, weapon: 'knife' },
],
allies: [],
onWin: "TraderRingCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse">>
<<goto "Bunker">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/TraderWatch.jpg"></center>
The man dangles a golden watch by its chain, grinning as if he’s holding treasure.
<<neighborhappy>>Beautiful piece, isn’t it? Doesn’t tick like it used to, but it’ll shine on your wrist or fetch you favors. Three cans of food and three bottles of water, and it’s all yours.<</neighborhappy>>
<<if $cannedFood >= 3 and $water >= 3>>
<<button "Give 3 canned food and 3 water">>
<<set $cannedFood -= 3>>
<<set $water -= 3>>
<<set $goldWatch += 1>>
<<goto "TraderWatchDeal">>
<</button>>
<<else>>
<button disabled>Locked: need 3 canned food + 3 water</button>
<</if>>
<<button "Attack him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 45, weapon: 'knife' },
],
allies: [],
onWin: "TraderWatchCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse">><<goto "Bunker">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/TraderMap.jpg"></center>
The man spreads out a crumpled map on the hatch, his finger tracing faded lines.
His eyes flick up at you with a hint of desperation.
<<neighborhappy>>This isn’t just paper. It’ll help you find places worth the risk.
Two cans of food and one bottle of water, and it’s yours. <</neighborhappy>>
<<nobr>><<if $cannedFood >= 2 and $water >= 1>>
<<button "Give 2 cans of food and 1 water">>
<<set $cannedFood -= 2>>
<<set $water -= 1>>
<<set $map += 1>>
<<goto "TraderMapDeal">>
<</button>>
<<else>>
<button disabled>Locked: need 2 canned food and 1 water</button>
<</if>>
<<button "Attack him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 40, weapon: 'knife' },
],
allies: [],
onWin: "TraderMapCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse">><<goto "Bunker">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/TraderScrap.jpg"></center>
The man pulls out a bundle of tangled wires and dented metal bits, his grin a little too wide.
<<manblackbeg>>Howdy partner! Useful stuff, if you know what to do with it. Ten pieces of scrap metal for just two bottles of water and one can of food. A bargain, don’t you think?<</manblackbeg>>
<<if $water >= 2 and $cannedFood >= 1>>
<<button "Give 2 water and 1 canned food">>
<<set $water -= 2>>
<<set $cannedFood -= 1>>
<<set $scrapMetal += 10>>
<<goto "TraderScrapDeal">>
<</button>>
<<else>>
<button disabled>Locked: need 2 water + 1 canned food</button>
<</if>>
<<button "Attack him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 25, weapon: 'club' },
],
allies: [],
onWin: "TraderScrapCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse">><<goto "Bunker">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/TraderBook.jpg"></center>
An old vagabond hugs a dusty book to his chest, eyes sunken but intent.
<<oldman>>Food and water… Just a little. Take the book. It’s worth more in the right hands.<</oldman>>
<<nobr>><<if $cannedFood >= 1 and $water >= 1>>
<<button "Give 1 canned food and 1 water">>
<<set $cannedFood -= 1>>
<<set $water -= 1>>
<<set $book += 1>>
<<goto "TraderBookDeal">>
<</button>>
<<else>>
<button disabled>Locked: need 1 canned food + 1 water</button>
<</if>>
<<button "Attack him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 20, weapon: 'fist' },
],
allies: [],
onWin: "TraderBookCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse">><<goto "Bunker">><</button>><</nobr>><<addmins 15>><<set $player.energy -= 5>><center><img src="assets/characters/neighbor/EastereggCode.jpg"></center>
You slowly lift the hatch, expecting to see someone, but the ground outside is empty, silent. As you lean closer, you notice something scratched into the metal surface of the bunker wall. Crude letters, carved in haste:
<center><b>CODE: extra</b></center>
A shiver runs down your spine. Whoever left it is already gone.
<<button "Next">><<goto "Bunker">><</button>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/TraderFake.jpg"></center>
The man waves you closer, clutching a lumpy bundle wrapped in filthy cloth. His eyes dart left and right as if guarding a great secret.
<<oldman>>This… Is rare. Priceless. I’ll part with it only for 50 credits. Don’t miss your chance.<</oldman>>
Your Funds: $<<=$currency>>
<<nobr>><<if $currency >= 50>>
<<button "Give him 50 funds">>
<<set $currency -= 50>>
<<set $scrapMetal += 1>>
<<goto "TraderFakeDeal">>
<</button>>
<<else>>
<button disabled>Locked: need 50 funds</button>
<</if>>
<<button "Attack him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 30, weapon: 'knife' },
],
allies: [],
onWin: "TraderFakeCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse">><<goto "Bunker">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/BanditWoman.jpg"></center>
When you opened the hatch, the woman put a knife to your body.
<<womanhorny>>Hand over your supplies or I’ll gut you!<</womanhorny>>
<<nobr>><<if !$patronUnlocked>>
<<button "Locked: secret option">>
<<run setup.openPatronDialog()>>
<</button>>
<<else>>
<<button "Seduce her">>
<<goto "BanditWomanSeduce">>
<</button>>
<</if>>
<<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 35, weapon: 'knife' },
],
allies: [],
onWin: "BanditWomanCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<if $cannedFood > 0 and $water > 0>>
<<button "Give her supplies (1 food + 1 water)">>
<<set $cannedFood -= 1>>
<<set $water -= 1>>
<<goto "BanditWomanGive">>
<</button>>
<<else>>
<button disabled>Locked: need 1 food + 1 water</button>
<</if>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/BrokenFlashlight.jpg"></center>
The man holds up a broken flashlight, its wires frayed and bulb shattered. His hands tremble as he offers it toward you.
<<manblackbeg>>Please... I can’t fix this. Without it, I’m blind out there at night. Can you help me?<</manblackbeg>>
<<nobr>><<if $player.intelligence >= 15>>
<<button "Repair the flashlight (15 INT)">>
<<set $reputation += 5>>
<<goto "BrokenFlashlightRepaired">>
<</button>>
<<else>>
<button disabled>Locked: need 15 INT</button>
<</if>>
<<button "Attack him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 30, weapon: 'club' },
],
allies: [],
onWin: "BrokenFlashlightCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse to help">>
<<goto "Bunker">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/SealedBox1.jpg"></center>
The woman clutches a small rusted lockbox, its dial covered in grime. She bites her lip, eyes darting between you and the sealed container.
<<womanasianbeg>>I’ve tried every combination I know... Maybe you’re smarter than me. If you can open it, we can share what's inside.<</womanasianbeg>>
<<nobr>><<if $player.intelligence >= 20>>
<<button "Crack the lock (20 INT)">>
<<set $reputation += 5>>
<<goto "SealedBoxOpened">>
<</button>>
<<else>>
<button disabled>Locked: need 20 INT</button>
<</if>>
<<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 15, weapon: 'fist' },
],
allies: [],
onWin: "SealedBoxCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse to help">>
<<goto "Bunker">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/WaterVisitor.jpg"></center>
A weary figure holds up a bottle of water, swallowing with effort as they show it to you.
<<womanblackbeg>>I just wanted to give you this...<</womanblackbeg>>
<<nobr>><<if !$patronUnlocked>>
<<button "Locked: seduce her">>
<<run setup.openPatronDialog()>>
<</button>>
<<else>>
<<button "Seduce her">>
<<goto "WaterVisitorNSFW">>
</button>
<</if>>
<<button "Take the water">>
<<set $water += 1>>
<<goto "WaterVisitorTake">>
</button>
<<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' },
],
allies: [],
onWin: "WaterVisitorCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/FoodVisitor.jpg"></center>
She lifts a dented can toward you, knuckles white around the metal.
<<womanwhitebeg>>It’s not much… But it’s real food. Please, take it.<</womanwhitebeg>>
<<nobr>><<if !$patronUnlocked>>
<<button "Locked: seduce her">>
<<run setup.openPatronDialog()>>
<</button>>
<<else>>
<<button "Seduce her">>
<<goto "FoodVisitorNSFW">>
</button>
<</if>>
<<button "Take the food">>
<<set $cannedFood += 1>>
<<goto "FoodVisitorTake">>
</button>
<<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' },
],
allies: [],
onWin: "FoodVisitorCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/MapPuzzle.jpg"></center>
The woman holds out a torn map covered with scribbles. On a separate scrap, strange symbols wind between faded lines like a riddle.
<<womanblackbeg>>Found this near the old road, but I can’t make sense of it.
Could you help me read it?<</womanblackbeg>>
<<nobr>><<if $player.intelligence >= 10>>
<<button "Decode the symbols (10 INT)">>
<<set $reputation += 5>>
<<goto "MapPuzzleSolved">>
<</button>>
<<else>>
<button disabled>Locked: need 10 INT</button>
<</if>>
<<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 15, weapon: 'fist' },
],
allies: [],
onWin: "MapPuzzleSolvedCombatWin",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<<button "Refuse to help">>
<<goto "Bunker">>
<</button>><</nobr>><<set $pistol += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "pistol", qty: [1] }])>></center>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/TraderPistol1.jpg"></center>
She takes the medkits with trembling hands, clutching them as if they were priceless.
<<womanwhitebeg>>Thank you. You’ve done more than you know.<</womanwhitebeg>>
She leaves you the pistol, then disappears into the ruins.
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "pistol", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><center><img src="assets/characters/neighbor/TraderMap.jpg"></center>
You hand over the food and water. The man takes them quickly, clutching the supplies as if his life depends on it. He presses the crumpled map into your hands, a faint smile breaking through his tired face.
<<neighborhappy>>Thanks, friend. May this lead you to places worth the risk and worth the reward. <</neighborhappy>>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "map", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $map += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "map", qty: [1] }])>></center>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/TraderRing.jpg"></center>
You pass her the food and water. She takes them with shaking hands, eyes glistening as she exhales a heavy breath. Carefully, she places the small golden ring on the hatch and pushes it toward you.
<<womanwhitebeg>>Thank you. I hope this ring brings you better fortune than it ever did me.<</womanwhitebeg>>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "goldRing", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $goldWatch += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "goldWatch", qty: [1] }])>></center>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/TraderWatch.jpg"></center>
You hand over the supplies. The man’s grin widens as he counts them, tucking the food and water greedily into his bag. He dangles the golden watch one last time before dropping it into your hands.
<<neighborhappy>>Pleasure doing business. May this shine bring you luck or at least open some doors for you.<</neighborhappy>>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "goldWatch", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $goldRing += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "goldRing", qty: [1] }])>></center>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/TraderScrap.jpg"></center>
You hand over the water and food. The man’s eyes light up as he stuffs them into his satchel without hesitation. He slides a bundle of tangled wires and dented metal pieces across the hatch toward you.
<<neighborhappy>>Good trade, friend. These parts may look rough, but in the right hands they’ll serve you well.<</neighborhappy>>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "scrapMetal", qty: [10] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $book += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "book", qty: [1] }])>></center>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/TraderBook.jpg"></center>
The old man handed you the book and grabbed the supplies you gave him.
<<oldman>>Thank you! Thank you!<</oldman>>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "book", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $scrapMetal += 10>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "scrapMetal", qty: [10] }])>></center>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_black",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/TraderFake.jpg"></center>
You handed the suspicious man the money, and he handed you a box and quickly began to walk away. It took you a moment to open it, and when you did, you got really pissed off.
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "scrapMetal", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $scrapMetal += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "scrapMetal", qty: [1] }])>></center>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/BanditWoman.jpg"></center>
You didn't want any trouble, so you gave the woman one bottle of water and one can of food.
<<womanhorny>>A wise decision.<</womanhorny>>
<center><b>You lost:</b><br>
<<= setup.renderItemList([{ id: "cannedFood", qty: [1] }, { id: "water", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<addmins 60>><<set $player.energy -= 20>><center><video width="480" height="320" controls autoplay playsinline loop>
<source src="assets/characters/neighbor/BanditWomanNSFW.mp4" type="video/mp4">
</video>
</center>
You managed to seduce this woman and fucked her hard in your bunker, making her squirt.
<<button "Next">><<goto "Bunker">><</button>><<set $player.intelligence += 1>><<addmins 90>><<set $player.energy -= 20>><center><img src="assets/characters/neighbor/BrokenFlashlight.jpg"></center>
It took you a while, but you managed to fix the flashlight.
You gained +1 <b>intelligence</b>.
<<manblackbeg>>The flashlight works again! Thank you very much!<</manblackbeg>>
<<nobr>><<button "Give it back">>
<<goto "Bunker">>
<</button>>
<<button "Steal it">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 30, weapon: 'club' },
],
allies: [],
onWin: "BrokenFlashlightCombatWin1",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $flashlight += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "flashlight", qty: [1] }])>></center>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $player.intelligence += 1>><<addmins 90>><<set $player.energy -= 20>><center><img src="assets/characters/neighbor/SealedBox.webp"></center>
You kneel by the box, wiping dust from the dial. With patience and steady hands, you listen for faint clicks as the tumblers shift. Finally, the lock snaps open. Inside, a small bundle of old bills and coins glimmers faintly. There were 100 funds.
You gained +1 <b>intelligence</b>.
<<womanasianbeg>>I... I couldn’t have done it without you. Thank you. Here is your share 50 funds.<</womanasianbeg>>
<<nobr>><<button "Give it back">><<set $currency += 50>>
<<goto "Bunker">>
<</button>>
<<button "Take all">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 15, weapon: 'fist' },
],
allies: [],
onWin: "SealedBoxCombatWin1",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance. During the fight, the box the woman was holding disappeared and you couldn't find it.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_asian",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $currency += 50>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance. </p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_asian",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $player.intelligence += 1>><<addmins 90>><<set $player.energy -= 20>><center><img src="assets/characters/neighbor/MapPuzzle.jpg"></center>
You spread the torn map across the hatch and trace the strange symbols.
Patterns emerge - landmarks disguised as runes, routes hidden in plain sight. Her eyes widen as you finish.
You gained +1 <b>intelligence</b>.
<<womanblackbeg>>Incredible... You’ve revealed paths I never saw. Maybe I could find something useful there.<</womanblackbeg>>
<<nobr>><<button "Give map back">>
<<goto "Bunker">>
<</button>>
<<button "Take it">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 15, weapon: 'fist' },
],
allies: [],
onWin: "MapPuzzleSolvedCombatWin1",
onLose: "GameOver"
})>><<set $reputation -= 10>><<goto "Combat">><</button>>
<</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance. During the fight, the piece of paper was completely destroyed.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_black",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $map += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance. </p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "map", qty: [1] }])>></center>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_black",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><center><img src="assets/characters/neighbor/FoodVisitor.jpg"></center>
You took the gift that the woman brought you.
<<womanwhitebeg>>Take care, it may come in handy in these difficult times.<</womanwhitebeg>>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "cannedFood", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><center><img src="assets/characters/neighbor/WaterVisitor.jpg"></center>
You took the gift that the woman brought you.
<<womanblackbeg>>Water is worth its weight in gold these days. May it serve you well.<</womanblackbeg>>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "water", qty: [1] }])>></center>
<<button "Next">><<goto "Bunker">><</button>><<set $cannedFood += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "cannedFood", qty: [1] }])>></center>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $water += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance. </p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "water", qty: [1] }])>></center>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_black",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<addmins 60>><<set $player.energy -= 20>><center><video width="480" height="320" controls autoplay playsinline loop>
<source src="assets/characters/neighbor/FoodVisitorNSFW.mp4" type="video/mp4"></video></center>
You seduced this woman, and you both had sex in your bunker. She rode your cock, and when you came inside her, she squirted.
<<button "Next">><<goto "Bunker">><</button>><<addmins 60>><<set $player.energy -= 20>><center><video width="480" height="320" controls autoplay playsinline loop>
<source src="assets/characters/neighbor/WaterVisitorNSFW.mp4" type="video/mp4"></video></center>
You managed to seduce that black woman and invite her to the bunker. You fucked her in the ass, and she came practically the whole time.
<<button "Next">><<goto "Bunker">><</button>>{
"introText": [
"They were waiting for your move."
],
"kiss": [
"You started kissing both of them.",
"Your tongues started to dance together."
],
"blowjob": [
"You sink into the plush couch, letting out a low sigh as hands grab your shoulders from either side, pulling you down to meet them halfway.",
"One mouth opens wide, engulfing your cock in one smooth motion. She sucks hard, tongue already circling the base with a demanding lick. The other's fingers are digging into your hips, urging you deeper.",
"'Goddamn,' you groan, feeling the first knot of pleasure begin to tighten in your gut.",
"One of them hums a low, throaty sound against your shaft, cheeks stretching taut with every pull, while the other traces lazy circles on your ass with her thumb. ",
"They work together like they've practiced this dance before, taking turns giving you that hungry mouth, pulling you deeper and deeper."
],
"handjob": [
"They're straddling you now, their chests pressed tight against yours, hands already working on the button of your jeans. You can feel the heat radiating off them even before they get their fingers in.",
"'Ready for this?' one of them murmurs in your ear, her breath warm against your skin as she reaches down to tug at your zipper. ",
"Your cock is almost instantly caught between their palms, both of them grabbing hold at once. One hand cups you warmly around the base, while the other works its way up, thumbs digging into your sensitive head.",
"'Fuck,' you breath out, 'I can't even...' You try to speak but her grip tightens, knuckles digging in as she starts rubbing back and forth.",
"The other one leans down, giving you a quick suck on the tip before she joins in. Their hands move together now, an insistent rhythm that makes your head spin, driving you hard into them both."
],
"fingerYourAss": [
"She’s got you pinned down by the hips, her mouth working on you like a goddamn vacuum cleaner. She sucks hard and deep, pulling you in with every swallow.",
"The other one's fingers are already inside you, stretching your asshole open wide. It feels so good, a tight fist pressing against the heat of your core. ",
"'Move,' she growls, her voice husky with desire. You try to shift under them both, arching your back for better access.",
"The one at your cock sucks hard again, taking you close to the edge before pulling back and giving a quick flick with her tongue. You gasp, needing air but hating how much she’s got you hooked.",
"It's pure torture, this double dose of pleasure. They keep you locked in place, one hand cupping your balls while the other digs into you deeper. "
],
"lickPussy": [
"They’re spread out before you, legs tangled, panting with anticipation. Their eyes are locked on yours, those wet smiles practically begging for it.",
"One of them runs a hand down your chest, fingers tracing the line of your nipples as she guides you closer. You bend down, taking in that sweet scent, the softness of their skin.",
"Her pussy is already slick with pre-come, just waiting to be devoured. You take her clit between your thumb and forefinger, teasing it back and forth before dipping your tongue down for the first taste. It's a shot of pure nectar. ",
"'Mmm,' she moans, squeezing her legs tighter around your waist. The other one watches with hungry eyes, already shifting to give you better access.",
"You move from girl to girl, lapping at their curves, finding the sweet spots that make them writhe and shiver. Their hands clutch at your hair, digging in as they arch toward your tongue."
],
"lickAss": [
"They're both sprawled on either side of you, panting softly. You can smell their musk, feel the heat radiating off their bodies even before you lean down.",
"Their asses are stretched open and inviting, smooth skin slick with a sheen of arousal. They look up at you with those come-hither expressions that make your mouth water.",
"One leg tucks up to give you easier access, while the other stays splayed out, urging you on. You circle the entrance first, tasting the salty sweetness before diving deeper.",
"They groan, their hands digging into the couch behind them as your tongue explores every inch. Your breath catches when they shift and press back against you, their warmth radiating through your skin.",
"You lick a trail up one tight cheek, savoring that warm tension as it pulls you in closer. You chase each other’s tastes, finding new spots to worship with the tip of your tongue."
],
"fuckPussy": [
"They’re panting, legs spread wide and aching for you. It’s like they've been waiting all night for this.",
"You don’t waste time with foreplay. You shove yourself between them, the slick heat of their bodies welcoming you home. Each one cries out as your cock fills them completely. ",
"'Take it,' the first one moans into the sheet, grabbing a fistful of your hair to pull you deeper. The other grabs your hips, her nails digging in as she arches against you.",
"You drive yourself hard into them both, their cries blending together in a symphony of pleasure and pain. It’s brutal, urgent, every thrust making those sweet little moans turn rougher.",
"'Goddamn it,' you groan, your hips bucking with the force of your need as they both clutch at you. 'So tight...' "
],
"fuckAss": [
"She's practically begging you to claim her. Legs spread wide, ass tilted up, she’s practically swallowed by the sheet but still manages to look both vulnerable and hungry. ",
"You kneel between her legs, already seeing how tight it is. 'Ready?' you growl, your breath warm against her cheek.",
"'Take me,' she pants back, her voice rough with desire. Fingers tangle in your hair as you lower yourself, feeling the slick heat of her entrance. ",
"It’s a goddamn cage around you, this tight tunnel of muscle and need. You push forward anyway, forcing yourself in until she cries out. It's the kind of cry that blends pain and pleasure, making your cock throb.",
"'God,' she gasps, 'I feel like I'm gonna split open. You’re so big...' "
],
"fuckYourAss": [
"They both circle you, hands on your hips, pulling you close as if testing which way they want to take this. Then the one with the strap-on leans in, that cocky little smirk already twisting her lips. 'Get ready,' she purrs before clamping it between her legs.",
"You're spread out, knees bent, practically begging for what comes next. That first shove of the strap-on against your entrance feels like a fist slamming into a soft target – it hurts, but in that good, delicious way.",
"She grinds against you, her hips working hard as she pushes herself into place. She's not just filling you, she's taking over completely.",
"'Move,' the other one murmurs, pushing your chest down, urging you to meet her with the thrust of your hips. It’s a rough rhythm, primal and demanding – that strap-on is relentless.",
"You moan against the back of their couch, sweat slicking your skin as they both ride you hard. The world shrinks down to the feel of it all: the pressure of those thighs on yours, that throbbing member pounding deep inside."
],
"fuckTits": [
"You pushed your cock between her breasts and started thrusting.",
"She wrapped her boobs around your cock and started stroking it."
],
"finishhersex": [
"They came super hard on your dick."
],
"finishher": [
"Both of them started squirting all over the room."
],
"cumonface": [
"You sprayed your cum on their waiting faces."
],
"cuminpussy": [
"You moaned and pushed your load straight into her pussy."
],
"cuminass": [
"You smashed her tight ass and left your load inside."
],
"ending": [
"After everything, they started to share your cum between them."
]
}{
"introText": [
"They were waiting for your move."
],
"blowjob": [
"Then her mouth covers both of you at once. The pressure of two sets of teeth against your shafts is intense, but there's something primal about it – like she wants to devour you whole. You can feel the heat radiating off her tongue as she swirls and sucks on you both. ",
"'Fuck,' he groans beside you, 'She’s got us good.' And yeah, she does. It's hard to breathe, hard to think straight when it feels like every muscle in your body is vibrating from that double dose of pleasure.",
"She started sucking you both simultaneously."
],
"handjob": [
"She doesn't waste time, both of your cocks are practically begging for her touch. You feel her warm palms cupping you at once, thumbs stroking the base of each one in a rhythm that sets your teeth on edge.",
"'Tell me what you like,' she murmurs, voice husky and low as she circles your heads with those long fingers.",
"But there’s no time for talking. She starts working them hard – slow, deliberate strokes with her palms, then quicker flicking motions that make your blood sing. One hand works harder than the other sometimes, teasing you both in turn."
],
"lickPussy": [
"She’s perched on his lap, head thrown back against his chest as he drives into her. Her hands grip his shoulders, but she's got this wild look in her eyes, like she wants more, needs more, even with him inside her already.",
"You kneel between her thighs, her scent hitting you full force – sweet and musky and utterly intoxicating. She shifts a little, giving you better access. 'Focus on me,' she breathes against his jaw, her voice thick with need.",
"There's a low rumble in his chest as he groans something about how much he wants to be the only thing filling her up tonight. But it’s your turn now. You circle her entrance with your tongue, savoring the warmth and tightness of her cunt before diving deeper.",
" 'Don't stop,' she murmurs against his mouth, and it makes you want to lick even harder, faster – make that sweet groan come again and again."
],
"lickAss": [
"She's getting restless, shifting against him – arching back for more of you as if she’s trying to bring all the heat closer together. That little groan he lets out is all it takes; you pick up the pace, working your tongue around her tight asshole with a need that matches hers.",
"You both started going at her holes. You started licking her tight ass, and the other man started licking her pussy."
],
"fuckPussy": [
"You started smashing her wet cunt as she sucked the other man's cock, but after a while he joined by pushing his cock into her asshole.",
"You began to vigorously penetrate her vagina while she engaged in oral stimulation with another man, but after a while, he joined in by inserting his penis into her anus.",
"You both started taking her holes hard."
],
"fuckAss": [
"You started fucking her asshole hard.",
"You claimed her ass when she sucked another guy's cock. After a while, he started licking her cunt and then thrust himself hard inside it."
],
"fuckYourAss": [
"He goes down hard and fast, taking you by surprise. 'He’s got his cock already hard – thick and slick with pre-cum, it's bigger than yours' she says.",
"She grunts in approval as he slams into your ass again and again. This isn't about finesse anymore – it's all power and need. He grunts too, deep in his chest, each thrust a little harder than the last.",
"He claimed your fucking shithole like you were some kind of whore."
],
"suckCock": [
"You were a good bitch and sucked his hard cock.",
"You started licking his cock tasting some precum."
],
"finishhimanal": ["He bred you while he was ripping your bitch ass."],
"finishhimoral": ["You ate all of his cum as a good dog."],
"finishhersex": [
"As you fuck her harder and harder, she finally has an intense orgasm."
],
"finishher": [
"All of this causes her to convulse across the entire bed."
],
"cumonface": [
"You ejaculated directly onto her face and into her mouth."
],
"cuminpussy": [
"When you fucked her in both holes, you came at the same time, flooding both of her holes."
],
"cuminass": [
"You came hard inside her asshole."
],
"ending": [
"In the end, they were completely exhausted and she was covered in sperm."
]
}<<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/BetrayalArgument.jpg"></center>
Two figures argue just outside the hatch - their voices sharp, tired, and soaked in grief. The man’s tone is cold and defensive; the woman’s eyes are wet but burning with anger.
<<manwhitebeg>>Hey, man... We're in a difficult situation, could you help us?<</manwhitebeg>>
<<womanwhitebeg>>We're in this because of you! Why did you kill him?! You're a bloody murderer!<</womanwhitebeg>>
<<manwhitebeg>>You think sleeping with him saved us? You disgust me.<</manwhitebeg>>
<<womanwhitebeg>>Saved us? I did everything I could to get water so that we wouldn't die! You cheated on me long before all this hell started! You hypocrite!<</womanwhitebeg>>
<<manwhitebeg>>I did what I had to do!<</manwhitebeg>>
<<womanwhitebeg>>So did I!<</womanwhitebeg>>
They both reach for their weapons - hands trembling, rage and guilt twisted together.
<<nobr>><<if $player.intelligence >= 12>>
<<button "Try to calm them down (12 INT)">>
<<goto "BetrayalArgumentCalm">>
</button>>
<<else>>
<button disabled>Locked: need 12 INT</button>
<</if>>
<<if $pistol > 0>>
<<button "Stand with the woman - shoot the man">>
<<goto "BetrayalArgumentSupportHer">>
<</button>>
<<else>>
<button disabled>Locked: need pistol</button>
<</if>>
<<if $pistol > 0>>
<<button "Stand with the man - shoot the woman">>
<<goto "BetrayalArgumentSupportHim">>
<</button>>
<<else>>
<button disabled>Locked: need pistol</button>
<</if>>
<<button "Close the hatch and stay out of it">>
<<goto "BetrayalArgumentDead">>
<</button>></nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/MadDrifter.jpg"></center>
<<MaleSurvivor>>You think you can hide from me?! You killed my son! I saw what you did! You’ll pay for it!<</MaleSurvivor>>
You have no idea who he’s talking about, but his voice trembles with real grief, and rage.
<<nobr>><<if $player.intelligence >= 10>>
<<button "Try to calm him down (10 INT)">>
<<goto "MadDrifterIntelligence">>
<</button>>
<<else>>
<button disabled>Locked: need 10 INT</button>
<</if>>
<<if $player.strength >= 40>>
<<button "Threaten him (40 STR)">>
<<goto "MadDrifterStrength">>
<</button>>
<<else>>
<button disabled>Locked: need 40 STR</button>
<</if>>
<<button "Attack him first">>
<<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Mad man', maxHp: 80, weapon: 'pistol' }
],
allies: [],
onWin: "MadDrifterCombatWin",
onLose: "GameOver"
})>>
<<goto "Combat">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/cameraThievesDuoFF.jpg"></center>
Two women stand by the hatch - one tall and calm, the other fidgeting, her eyes darting around the wasteland. They look like partners, but something in their posture says the trust between them is wearing thin.
<<womanwhitebeg>>We’ve been walking for days… No water, no warmth, no company... Can we get some rest?<</womanwhitebeg>>
<<womanhorny>>We could make the night worth your while.<</womanhorny>>
<<nobr>><<button "Let them in and fuck them">>
<<run setup.startNSFW({
text: "FFM",
scenes: "FFM",
option: "maybeStealFFM"
})>>
<<goto "RandomNSFW">>
<</button>>
<<button "Attack them">>
<<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 20, weapon: 'knife' },
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 20, weapon: 'knife' }
],
allies: [],
onWin: "ThievesDuoFFCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Refuse and close the hatch">>
<<goto "Bunker">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/ThievesCoupleMF.jpg"></center>
The couple stands close, breathing in sync. The man keeps a hand near his belt, while the woman's smile is quick and practiced.
<<manwhitebeg>>Can we rest there? We only want a night and maybe a trade. <</manwhitebeg>>
<<womanhorny>>Or maybe we can have some fun together...<</womanhorny>>
<<nobr>><<button "Let them in and fuck them">>
<<run setup.startNSFW({
text: "MMF",
scenes: "MMF",
option: "maybeStealMMF"
})>>
<<goto "RandomNSFW">>
<</button>>
<<button "Attack them">>
<<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 35, weapon: 'knife' },
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 20, weapon: 'knife' }
],
allies: [],
onWin: "ThievesCoupleMFCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Refuse and close the hatch">>
<<goto "Bunker">>
<</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/CoupleRestlessMF.jpg"></center>
They lean on each other for a moment of fragile warmth. He watches you with cautious eyes. She stares past you, hollow and quiet.
<<manwhitebeg>>Please… One can of food will keep us moving. We're not asking for much.<</manwhitebeg>>
<<womanwhitebeg>>If you have nothing, then leave us be. We won't trouble you.<</womanwhitebeg>>
<<nobr>><<if $water > 0>>
<<button "Give them water">>
<<set $water -= 1>>
<<goto "strangerGiveWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Give them food">>
<<set $cannedFood -= 1>>
<<goto "strangerGiveFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Make a deal">><<run setup.startNSFW({
text: "MMF",
scenes: "MMF",
option: "begging"
})>><<goto "RandomNSFW">><</button>>
<<button "Attack them">>
<<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 20, weapon: 'fist' },
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' }
],
allies: [],
onWin: "CoupleRestlessMFCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Tell them to fuck off">><<set $reputation -= 2>><<goto "Bunker">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/YoungLoversMF.jpg"></center>
They stand close together, whispering in frightened tones. The boy glances at you while the girl bites her lip, barely holding herself together.
<<manwhitebeg>>We just need something to eat and a direction... Please! We're lost.<</manwhitebeg>>
<<womanwhitebeg>>Please, anything would help.<</womanwhitebeg>>
<<nobr>><<if $water > 0>>
<<button "Give them water">>
<<set $water -= 1>>
<<goto "strangerGiveWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Give them food">>
<<set $cannedFood -= 1>>
<<goto "strangerGiveFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Make a deal">><<run setup.startNSFW({
text: "MMF",
scenes: "MMF",
option: "begging"
})>><<goto "RandomNSFW">><</button>>
<<button "Attack them">>
<<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Man', maxHp: 20, weapon: 'fist' },
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' }
],
allies: [],
onWin: "YoungLoversMFCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Tell them to fuck off">><<set $reputation -= 2>><<goto "Bunker">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/EstrangedPartnersFF.jpg"></center>
When you opened it, one of the women immediately started begging.
<<womanwhitebeg>>Thank goodness you've opened! Please give us something!<</womanwhitebeg>>
You didn't say anything, and the woman who spoke looked reproachfully at the other woman.
<<womanhorny>>I won't beg, I'd rather suck his dick than humiliate myself like that.<</womanhorny>>
<<nobr>><<if $water > 0>>
<<button "Give them water">>
<<set $water -= 1>>
<<goto "strangerGiveWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Give them food">>
<<set $cannedFood -= 1>>
<<goto "strangerGiveFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Make a deal">><<run setup.startNSFW({
text: "FFM",
scenes: "FFM",
option: "begging"
})>><<goto "RandomNSFW">><</button>>
<<button "Attack them">>
<<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' },
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' }
],
allies: [],
onWin: "EstrangedPartnersFFCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Tell them to fuck off">><<set $reputation -= 2>><<goto "Bunker">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/CodeWomanDirectionsA.jpg"></center>
Dust coats her cheeks. She presses a scrap of paper to the hatch - crude lines and strange marks scratched in haste.
<<womanwhitebeg>>I'm lost. These symbols… I was told they point to a safe path, but I can’t read them. Can you?<</womanwhitebeg>>
<<nobr>><<if !$patronUnlocked>>
<<button "Locked: secret option">>
<<run setup.openPatronDialog()>>
<</button>>
<<else>>
<<button "Seduce her">>
<<goto "DirectionsASeduce">>
</button>
<</if>>
<<if $player.intelligence >= 10>>
<<button "Decode the symbols (10 INT)">>
<<set $reputation += 5>>
<<goto "CodeWomanDirectionsASolved">>
</button>>
<<else>>
<button disabled>Locked: need 10 INT</button>
<</if>>
<<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' }
],
allies: [],
onWin: "CodeWomanDirectionsACombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Tell her that you don't know. Close the hatch.">><<goto "Bunker">><</button>><</nobr>><<addmins 30>><<set $player.energy -= 10>><center><img src="assets/characters/neighbor/CodeWomanDirectionsB.jpg"></center>
Her hand shakes as she holds up a cracked compass, needle stuttering near north. She glances toward the horizon, then back at you.
<<womanwhitebeg>>Road signs are gone. If I head the wrong way, I won't make it. Please… Which way leads to water and shelter?<</womanwhitebeg>>
<<nobr>><<if !$patronUnlocked>>
<<button "Locked: secret option">>
<<run setup.openPatronDialog()>>
<</button>>
<<else>>
<<button "Seduce her">>
<<goto "DirectionsBSeduce">>
</button>
<</if>>
<<if $player.intelligence >= 10>>
<<button "Decode the symbols (10 INT)">>
<<set $reputation += 5>>
<<goto "CodeWomanDirectionsBSolved">>
</button>>
<<else>>
<button disabled>Locked: need 10 INT</button>
<</if>>
<<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' }
],
allies: [],
onWin: "CodeWomanDirectionsBCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Tell her that you don't know. Close the hatch.">><<goto "Bunker">><</button>><</nobr>><<set $player.intelligence += 1>><<set $reputation += 5>><<addmins 10>><<set $player.energy -= 5>><center><img src="assets/characters/neighbor/CodeWomanDirections.jpg"></center>
You traced a few lines on her map to mark out a safe route through the ruins, then pointed her in the right direction. Her eyes lit up as hope returned to her face.
You gained +1 <b>intelligence</b>.
<<womanwhitebeg>>Thank you... I thought I'd never find the right path. You might’ve just saved my life.<</womanwhitebeg>>
<<button "Next">><<goto "Bunker">><</button>><<set $map += 1>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance. </p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "map", qty: [1] }])>></center>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<addmins 60>><<set $player.energy -= 20>><center><video width="480" height="320" controls autoplay playsinline loop>
<source src="assets/characters/neighbor/DirectionsASeduceNSFW.mp4" type="video/mp4">
</video>
</center>
You managed to seduce this woman and fucked her hard in your bunker, making her squirt.
<<button "Next">><<goto "Bunker">><</button>><<set $player.intelligence += 1>><<set $reputation += 5>><<addmins 10>><<set $player.energy -= 5>><center><img src="assets/characters/neighbor/CodeWomanDirections.jpg"></center>
You described the nearby terrain and pointed her toward a stream that still had clean water. She nodded, clutching her broken compass tightly.
You gained +1 <b>intelligence</b>.
<<womanwhitebeg>>You didn’t have to help... But you did. I owe you one, stranger.<</womanwhitebeg>>
<<button "Next">><<goto "Bunker">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance. </p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<addmins 60>><<set $player.energy -= 20>><center><img src="assets/characters/neighbor/DirectionsBSeduceNSFW.webp"></center>
You nailed that bitch, slammed your cock right in her fucking mouth while she was begging for it on her knees. Left her gasping for air, kneeling there with your cum dripping down her throat.
<<button "Next">><<goto "Bunker">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The couple are wounded and helpless. What do you want to do with them?</p>
<<nobr>><<button "Spare them">><<goto "SpareAfterFight">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate their freedom">><<run setup.startNSFW({
text: "MMF",
scenes: "MMF",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The couple are wounded and helpless. What do you want to do with them?</p>
<<nobr>><<button "Spare them">><<goto "SpareAfterFight">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate their freedom">><<run setup.startNSFW({
text: "FFM",
scenes: "FFM",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $reputation += 5>><<addmins 5>><<set $player.energy -= 5>><center><img src="assets/characters/neighbor/BetrayalArgument.jpg"></center>
You step forward without hesitation. The man's eyes flash with accusation, but your hand is steady. The shot cracks once - he staggers, then collapses into the dust, a dark bloom spreading across his shirt. The woman drops to her knees, staring at the body, then looks up at you with raw, exhausted gratitude.
<<womanwhitebeg>>You... You saved me. I didn't know what to do. Thank you. <</womanwhitebeg>>
<<nobr>><<button "Attack her">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 30, weapon: 'pistol' },
],
allies: [],
onWin: "BetrayalArgumentSupportHerCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Close the hatch">><<goto "Bunker">><</button>><</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><<set $reputation -= 5>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_black",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $reputation -= 5>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The couple are wounded and helpless. What do you want to do with them?</p>
<<nobr>><<button "Spare them">><<goto "SpareAfterFight">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate their freedom">><<run setup.startNSFW({
text: "MMF",
scenes: "MMF",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $reputation -= 5>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The couple are wounded and helpless. What do you want to do with them?</p>
<<nobr>><<button "Spare them">><<goto "SpareAfterFight">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate their freedom">><<run setup.startNSFW({
text: "MMF",
scenes: "MMF",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $reputation -= 5>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The couple are wounded and helpless. What do you want to do with them?</p>
<<nobr>><<button "Spare them">><<goto "SpareAfterFight">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate their freedom">><<run setup.startNSFW({
text: "FFM",
scenes: "FFM",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<if $eventItemsGive and $eventItemsGive.length > 0>><<run setup.applyEventItems("give", $eventItemsGive)>><p><b>Later, something feels off... You realize something's missing and they are gone.</b></p>
<center><b>You lost:</b></center>
<<= setup.renderItemList($eventItemsGive)>><<else>><p><b>After a good fuck, they leaves quietly. Thankfully, nothing seems to be missing.</b></p><</if>>
<<button "Next">><<goto "Bunker">><</button>><<if $eventItemsGive and $eventItemsGive.length > 0>><<run setup.applyEventItems("give", $eventItemsGive)>><p><b>Later, something feels off... You realize something's missing and they are gone.</b></p>
<center><b>You lost:</b></center>
<<= setup.renderItemList($eventItemsGive)>><<else>><p><b>After a good fuck, they leaves quietly. Thankfully, nothing seems to be missing.</b></p><</if>>
<<button "Next">><<goto "Bunker">><</button>><<set $pistol += 2>><center><img src="assets/characters/neighbor/BetrayalArgumentCalm.jpg"></center>
You tried to reason with them, speaking slowly, carefully choosing every word. But it was as if your voice couldn’t pierce the wall of anger between them. In a heartbeat, two shots cracked through the air. Both collapsed instantly, falling into the dust - motionless. You stepped closer. Two neat holes. Two pistols. Two wasted lives. You picked up their weapons and stared at the bodies, realizing they couldn’t stay here.
<center><b>You received:</b><br>
<<= setup.renderItemList([{ id: "pistol", qty: [2] }])>></center>
<<nobr>><<button "Bury bodies far from the bunker">><<addmins 300>><<set $player.energy -= 50>><<goto "Bunker">><</button>>
<<button "Eat them">><<goto "CannibalAfterFight">><</button>><</nobr>><<addmins 1>><<set $player.energy -= 2>><center><img src="assets/characters/neighbor/BetrayalArgument.jpg"></center>
You raise the pistol and fire. The woman collapses, silence falling like a wet cloth.
Before you can move, the man screams - a sound more animal than human and aimed at you.
<<manwhitebeg>>My wife! You motherfucker! You killed her!<</manwhitebeg>>
<<button "Fight him">> <<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorMale', name: 'Furious man', maxHp: 60, weapon: 'pistol' },
],
allies: [],
onWin: "BetrayalArgumentSupportHimCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>><<addmins 10>><<set $player.energy -= 5>>You decided not to get involved and quietly closed the bunker hatch. Moments later, gunshots echoed in the distance - followed by a hollow silence. You stood there for a while, staring at the metal door, but you didn’t want to see what happened next.
<<button "Next">><<goto "Bunker">><</button>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The woman is wounded and helpless. What do you want to do with her?</p>
<<nobr>><<button "Spare her">><<goto "SpareAfterFight">><</button>>
<<button "Kill her">><<goto "KillAfterFight">><</button>>
<<button "Negotiate her freedom">><<run setup.startNSFW({
text: "female",
scenes: "female_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The man is wounded and helpless. What do you want to do with him?</p>
<<nobr>><<button "Spare him">><<goto "SpareAfterFight">><</button>>
<<button "Kill him">><<goto "KillAfterFight">><</button>>
<<button "Negotiate his freedom">><<run setup.startNSFW({
text: "male",
scenes: "male_white",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>><<set $player.intelligence += 1>><<set $reputation += 5>><<addmins 15>><<set $player.energy -= 5>><center><img src="assets/characters/neighbor/MadDrifter1.jpg"></center>
You raise your voice, steady and calm. You tell him you’ve never seen his son, that there’s been a mistake - that the world is cruel enough without adding more blood. For a long moment, there’s only silence. Then, his voice cracks.
You gained +1 <b>intelligence</b>.
<<MaleSurvivor>>Maybe... Maybe it was not you... I'll be going now.<</MaleSurvivor>>
<<button "Next">><<goto "Bunker">><</button>><<set $reputation += 5>><<addmins 15>><<set $player.energy -= 5>><center><img src="assets/characters/neighbor/MadDrifter1.jpg"></center>
You slam your fist against the hatch, your voice a roar.
<<you>>If you want revenge, then come and take it, but you won’t walk away alive!<</you>>
A heavy silence follows, then the sound of boots scraping against dirt as he slowly backs away.
<<you>>You don't stand a chance with me. Look at yourself.<</you>>
He mutters curses, then vanishes into the wasteland.
<<button "Next">><<goto "Bunker">><</button>><<addmins 30>><<set $player.energy -= 10>>When you opened it, one of the women immediately started speaking.
<<womanhorny>>Show him something nice, slut.<</womanhorny>>
The second one pulled up her blouse to free her firm breasts.
<center><img src="assets/characters/neighbor/SexyBeggarsFF.webp"></center>
<<womanhorny>>So, honey? Will you help women in need? We'd love to have something to eat.<</womanhorny>>
<<nobr>><<if $water > 0>>
<<button "Give them water">>
<<set $water -= 1>>
<<goto "strangerGiveWater">>
<</button>>
<<else>>
<button disabled>Locked: you need water</button>
<</if>>
<<if $cannedFood > 0>>
<<button "Give them food">>
<<set $cannedFood -= 1>>
<<goto "strangerGiveFood">>
<</button>>
<<else>>
<button disabled>Locked: you need canned food</button>
<</if>>
<<button "Make a deal">><<run setup.startNSFW({
text: "FFM",
scenes: "FFM",
option: "begging"
})>><<goto "RandomNSFW">><</button>>
<<button "Attack them">>
<<run setup.startCombat({
enemies: [
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' },
{ spritePrefix: 'survivorFemale', name: 'Woman', maxHp: 10, weapon: 'fist' }
],
allies: [],
onWin: "SexyBeggarsFFCombatWin",
onLose: "GameOver"
})>><<goto "Combat">><</button>>
<<button "Tell them to fuck off">><<set $reputation -= 2>><<goto "Bunker">><</button>><</nobr>><<set $reputation -= 5>><<set $player.strength += 1>><<set $player.endurance += 1>><center><img src="assets/characters/neighbor/fightWon.webp"></center>
<p>You survived the brutal encounter. The fight hardened your muscles and taught you the limits of your endurance.</p>
<p><b>You gained +1 Strength and +1 Endurance.</b></p>
<p>The couple are wounded and helpless. What do you want to do with them?</p>
<<nobr>><<button "Spare them">><<goto "SpareAfterFight">><</button>>
<<button "Kill them">><<goto "KillAfterFight">><</button>>
<<button "Negotiate their freedom">><<run setup.startNSFW({
text: "FFM",
scenes: "FFM",
option: "fight"
})>><<goto "RandomNSFW">><</button>><</nobr>>